SQL est un langage déclaratif, pas un langage procédural. Autrement dit, vous construisez une instruction SQL pour décrire les résultats souhaités. Vous ne dites pas au moteur SQL comment faire le travail.
En règle générale, il est judicieux de laisser le moteur SQL et l'optimiseur SQL trouver le meilleur plan de requête. Le développement d'un moteur SQL demande de nombreuses années-personnes, alors laissez les ingénieurs faire ce qu'ils savent faire.
Bien sûr, il existe des situations où le plan de requête n'est pas optimal. Ensuite, vous souhaitez utiliser des conseils de requête, restructurer la requête, mettre à jour les statistiques, utiliser des tables temporaires, ajouter des index, etc. pour obtenir de meilleures performances.
Quant à votre question. Les performances des CTE et des sous-requêtes devraient, en théorie, être les mêmes, car les deux fournissent les mêmes informations à l'optimiseur de requêtes. Une différence est qu'un CTE utilisé plus d'une fois peut être facilement identifié et calculé une fois. Les résultats pourraient ensuite être stockés et lus plusieurs fois. Malheureusement, SQL Server ne semble pas tirer parti de cette méthode d'optimisation de base (vous pourriez appeler cette élimination de sous-requête commune).
Les tables temporaires sont différentes, car vous fournissez plus de conseils sur la façon dont la requête doit être exécutée. Une différence majeure est que l'optimiseur peut utiliser les statistiques de la table temporaire pour établir son plan de requête. Cela peut entraîner des gains de performances. De plus, si vous avez un CTE (sous-requête) compliqué qui est utilisé plusieurs fois, le stockage dans une table temporaire augmentera souvent les performances. La requête n'est exécutée qu'une seule fois.
La réponse à votre question est que vous devez jouer pour obtenir les performances que vous attendez, en particulier pour les requêtes complexes qui sont exécutées régulièrement. Dans un monde idéal, l'optimiseur de requêtes trouverait le chemin d'exécution parfait. Bien qu'il le fasse souvent, vous pourrez peut-être trouver un moyen d'obtenir de meilleures performances.