SQL è un linguaggio dichiarativo, non un linguaggio procedurale. Cioè, si costruisce un'istruzione SQL per descrivere i risultati desiderati. Non stai dicendo al motore SQL come fare il lavoro.
Come regola generale, è una buona idea lasciare che il motore SQL e l'ottimizzatore SQL trovino il miglior piano di query. Ci sono molti anni di lavoro personale che vanno allo sviluppo di un motore SQL, quindi lascia che gli ingegneri facciano ciò che sanno fare.
Naturalmente, ci sono situazioni in cui il piano di query non è ottimale. Quindi si desidera utilizzare i suggerimenti per le query, ristrutturare la query, aggiornare le statistiche, utilizzare tabelle temporanee, aggiungere indici e così via per ottenere prestazioni migliori.
Per quanto riguarda la tua domanda. Le prestazioni di CTE e sottoquery dovrebbero, in teoria, essere le stesse poiché entrambe forniscono le stesse informazioni a Query Optimizer. Una differenza è che un CTE usato più di una volta potrebbe essere facilmente identificato e calcolato una volta. I risultati potrebbero quindi essere memorizzati e letti più volte. Sfortunatamente, SQL Server non sembra trarre vantaggio da questo metodo di ottimizzazione di base (è possibile chiamare questa eliminazione di subquery comune).
Le tabelle temporanee sono una questione diversa, perché stai fornendo ulteriori indicazioni su come eseguire la query. Una delle principali differenze è che l'ottimizzatore può utilizzare le statistiche della tabella temporanea per stabilire il suo piano di query. Ciò può comportare miglioramenti delle prestazioni. Inoltre, se si dispone di un CTE (sottoquery) complicato che viene utilizzato più di una volta, la sua memorizzazione in una tabella temporanea spesso migliorerà le prestazioni. La query viene eseguita una sola volta.
La risposta alla tua domanda è che devi giocare per ottenere le prestazioni che ti aspetti, in particolare per query complesse che vengono eseguite su base regolare. In un mondo ideale, Query Optimizer trova il percorso di esecuzione perfetto. Anche se spesso accade, potresti essere in grado di trovare un modo per ottenere prestazioni migliori.