Это зависит. Для вашего примера, SQL Server достаточно умен, чтобы выполнить запрос только один раз. Это оптимизация.
Часто такие конструкции перемещаются в предложение FROM
, поэтому однократное выполнение более очевидно:
SELECT . . .
FROM SomeTable s JOIN
(SELECT MAX(SomeTableId) as max_SomeTableId
FROM OtherTable
) o
ON s.id >= max_SomeTableId;
Если в вашем запросе есть условие корреляции (обычно это предложение where
или having
, которое ссылается на внешний запрос), тогда может быть выполнено более одного раза.
Я говорю "может", потому что фактический план выполнения не может быть похож на ваш исходный запрос. SQL является декларативным языком, где «запрос» фактически выражает то, как должен выглядеть набор результатов. Оптимизатор может выбрать любой метод для получения объявленного результирующего набора.