Первая форма использует подзапрос в качестве источника таблицы в своем предложении FROM
; он может возвращаться между нулем и многими строками.
Для каждой строки, в которую возвращается подзапрос, вычисляется выражение ISNULL
. Но если в подзапросе нет строк, то окончательный вывод не содержит строк.
Вторая форма использует SELECT
без предложения FROM
- который всегда будет создавать набор результатов, содержащий ровно одну строку. Затем он также использует подзапрос скаляр (вводя подзапрос в месте, где ожидается скалярное значение) - это должно либо произвести нулевой, либо один результат. Если подзапрос производит нулевые результаты, то заменяется NULL
.
Таким образом, разница между этими двумя, что первый запрос может вернуться между нулем и числом строк, а выражение ISNULL
вычисляется для каждой строки. В то время как второй запрос всегда производит ровно одну строку, и если подзапрос возвращает несколько результатов, возникает ошибка.