Ответ 1
Из того, что я понимаю, оператор WITH также создает временный набор результатов.
Нет. Использование CTE не создаст "временный результирующий набор". Могут быть причины для запроса для создания рабочих таблиц, но только потому, что вы используете CTE, не является одним из них.
Эти два запроса имеют идентичный план запросов, и ни один из них не создает временный результат, например, временную таблицу в tempdb.
with randomTenUsers as
(
select top 10 *
from users
)
select *
from randomTenUsers;
select *
from (
select top 10 *
from users
) x;
Как отметил marc_s в комментарии, то, что вы должны использовать, зависит от того, что вы хотите сделать. Бывают ситуации, когда создание временной таблицы имеет смысл и есть ситуации, когда это совершенно необязательно.