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.