Очевидно, что может, как вы сами показали.
Почему? Наиболее очевидная причина заключается в том, что оптимизатор знает размер временной таблицы. Это дает ему больше информации для оптимизации запроса. CTE - только оценка. Итак, улучшение, которое вы видите, связано с планом запросов.
Другая причина может быть в том, что в запросе указывается CTE несколько раз. SQL Server не материализует CTE, поэтому код определения будет выполняться несколько раз.
Иногда вы целенаправленно материализуете CTE как временные таблицы, чтобы в них можно было добавлять индексы. Это также может улучшить производительность.
Все, что сказано, я предпочитаю избегать временных таблиц. Оптимизатор обычно довольно хороший.