Intentaré no copiar/pegar MSDN
No importa.
Un CTE es independiente de la ejecución de consultas:es solo una construcción de lenguaje. Piense en ello como una tabla derivada ordenada o una subconsulta.
Esto significa que, a excepción de las CTE recursivas (ver más adelante), todas Los CTE se pueden codificar en línea. Si usa el código CTE una vez, es para legibilidad . Si usa el CTE dos veces o más, entonces es defensivo:no quiere cometer un error y tener la tabla derivada diferente en cada uso.
Cuando un CTE se usa dos veces o más, ese código se ejecutará dos veces o más. No se ejecutará una vez ni se almacenará en caché en tempdb.
Resumen:puede o no, como si el código estuviera en línea.
Nota:un CTE recursivo es simplemente una tabla derivada dentro de una tabla derivada dentro de una tabla derivada dentro de una tabla derivada dentro de un der... así que se aplica lo mismo.
Puede ver esto en Artículo de Tony Rogerson . El uso de tempdb ocurriría de todos modos si se codificara en línea. También señala que usar una tabla temporal puede ser mejor debido a la expansión "macro" que expliqué anteriormente
FYI:lo mismo se aplica a las vistas. Solo macros.