CTE è solo un alias per la query.
Può (o meno) essere eseguito nuovamente ogni volta che viene utilizzato.
Non esiste un modo pulito per forzare CTE materializzazione in SQL Server (come /*+ MATERIALIZE */ di Oracle ), e devi fare brutti scherzi come questo:
CTE può migliorare le prestazioni se utilizzato in piani che richiedono una sola valutazione (come HASH JOIN , MERGE JOIN ecc.).
In questi scenari, la tabella hash verrà creata direttamente dal CTE , durante l'utilizzo della tabella temporanea sarà necessario valutare il CTE , trascinando i risultati nella tabella temporanea e leggendo nuovamente la tabella temporanea.