Ответ 1
Я попытаюсь не копировать/вставлять MSDN
Это не имеет значения.
CTE не зависит от выполнения запроса: это только языковая конструкция. Подумайте об этом как о чистой производной таблице или подзапросе.
Это означает, что за исключением рекурсивных CTE (см. ниже), CTRL-коды все могут быть закодированы inline. Если вы используете код CTE один раз, он предназначен для чтения. Если вы используете CTE два или более раза, то он защищен: вы не хотите делать ошибку и иметь производную таблицу по-разному для каждого использования.
Если CTE используется дважды или более, то этот код будет выполняться дважды или более. Он не будет выполняться один раз и кэшируется в tempdb.
Сводка: это может быть или не быть, как если бы код был встроенным.
Примечание: рекурсивный CTE представляет собой просто производную таблицу внутри производной таблицы внутри производной таблицы внутри производной таблицы внутри der... так же применяется.
Вы можете увидеть это в статье Тони Роджерсона. Использование tempdb будет происходить в любом случае, если закодировано inline. Он также отмечает, что использование временной таблицы может быть лучше из-за расширения макроса, которое я объяснил выше
FYI: то же самое относится к представлениям. Просто макросы.