Ради Бога, я обновлю этот вопрос тем же самым ответом, что и этот (Subquery using Exists 1 or Exists *), так как (в настоящее время) неправильный ответ отмечен как принятый. Обратите внимание, что стандарт SQL фактически говорит, что EXISTS через * идентичен константе.
No. Это было покрыто bazillion раз. SQL Server является интеллектуальным и знает, что он используется для EXISTS и возвращает NO DATA в систему.
Quoth Microsoft: http://technet.microsoft.com/en-us/library/ms189259.aspx?ppud=4
Список выбора подзапроса введенного СУЩЕСТВУЕТ почти всегда состоит из звездочки (*). Существует нет причины перечислять имена столбцов, потому что вы просто проверяете, существуют ли строки, которые соответствуют условиям, указанным в подзапросе .
Кроме того, не верьте мне? Попробуйте выполнить следующие задачи:
SELECT whatever
FROM yourtable
WHERE EXISTS(SELECT 1/0
FROM someothertable
WHERE a_valid_clause)
Если это действительно что-то делает с SELECT-списком, это приведет к ошибке div на нуль. Это не так.
EDIT: Обратите внимание, что SQL-стандарт фактически говорит об этом.
ANSI SQL 1992 Standard, стр 191 http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt
3) Case:
a) If the <select list> "*" is simply contained in a <subquery> that is immediately contained in an <exists predicate>, then the <select list> is equivalent to a <value expression> that is an arbitrary <literal>.
спасибо за последующее наблюдение. Принятый ответ изменен. – TSomKes 2010-12-03 17:09:43