CTE
es solo un alias para la consulta.
Puede (o no) volver a ejecutarse cada vez que se usa.
No hay una forma limpia de forzar CTE
materialización en SQL Server
(como /*+ MATERIALIZE */
de Oracle ), y tienes que hacer trucos sucios como este:
CTE
puede mejorar el rendimiento si se usa en planes que requieren solo una evaluación (como HASH JOIN
, MERGE JOIN
etc.).
En estos escenarios, la tabla hash se construirá directamente desde el CTE
, mientras que el uso de la tabla temporal requerirá evaluar el CTE
, introduciendo los resultados en la tabla temporal y leyendo la tabla temporal una vez más.