Postaram się nie kopiować/wklejać MSDN
To nie ma znaczenia.
CTE jest niezależne od wykonywania zapytania:jest tylko konstrukcją językową. Pomyśl o tym jako o zgrabnej tabeli pochodnej lub podzapytaniu.
Oznacza to, że z wyjątkiem rekurencyjnych CTE (patrz dalej), wszystkie CTE mogą być kodowane inline. Jeśli użyjesz kodu CTE raz, służy to czytelności . Jeśli użyjesz CTE dwa lub więcej razy, jest to defensywne:nie chcesz popełnić błędu i za każdym razem używaj innej tabeli pochodnej.
Jeśli CTE zostanie użyte dwa lub więcej razy, kod zostanie wykonany dwa razy lub więcej. Nie zostanie wykonane raz i zapisane w pamięci podręcznej w tempdb.
Podsumowanie:może, ale nie musi, tak jak w przypadku kodu wbudowanego.
Uwaga:rekursywne CTE to po prostu tabela pochodna wewnątrz tabeli pochodnej wewnątrz tabeli pochodnej wewnątrz tabeli pochodnej wewnątrz der... więc to samo dotyczy.
Możesz to zobaczyć w Artykuł Tony'ego Rogersona . Użycie tempdb i tak by się zdarzyło, gdyby zostało zakodowane inline. Zauważa również, że użycie tabeli tymczasowej może być lepsze ze względu na rozszerzenie „makro”, które wyjaśniłem powyżej
FYI:to samo dotyczy widoków. Tylko makra.