Ще се опитам да не копирам/поставям MSDN
Няма значение.
CTE е независим от изпълнението на заявка:той е само езикова конструкция. Мислете за това като за чиста извлечена таблица или подзаявка.
Това означава, че с изключение на рекурсивните CTE (вижте по-късно), всички CTE могат да бъдат кодирани в линия. Ако използвате CTE кода веднъж, това е за четимост . Ако използвате CTE два пъти или повече, тогава той е отбранителен:не искате да направите грешка и получената таблица да е различна при всяко използване.
Когато CTE се използва два пъти или повече, тогава този код ще бъде изпълнен два пъти или повече. Няма да се изпълни веднъж и да се кешира в tempdb.
Резюме:може или не, точно както ако кодът беше вграден.
Забележка:рекурсивният CTE е просто производна таблица вътре в производна таблица вътре в производна таблица вътре в производна таблица вътре в der... така че важи същото.
Можете да видите това в Статията на Тони Роджърсън . Използването на tempdb ще се случи така или иначе, ако се кодира вградено. Той също така отбелязва, че използването на временна таблица може да бъде по-добро поради „макро“ разширението, което обясних по-горе
FYI:същото важи и за изгледите. Само макроси.