CTE
é apenas um alias para a consulta. Ele pode (ou não) ser executado novamente toda vez que for usado.
Não há uma maneira limpa de forçar o
CTE
materialização em SQL Server
(como o /*+ MATERIALIZE */
da Oracle ), e você tem que fazer truques sujos como este:CTE
pode melhorar o desempenho se usado em planos que requerem apenas uma avaliação (como HASH JOIN
, MERGE JOIN
etc.). Nesses cenários, a tabela de hash será criada diretamente do
CTE
, ao usar a tabela temporária, será necessário avaliar o CTE
, puxando os resultados para a tabela temporária e lendo a tabela temporária mais uma vez.