Догадка, потому что в вашем вопросе есть ошибка копирования / вставки
EXISTS не проверяет значения. Проверяет строки.
Так что они действительны, потому что SELECT дает одну строку
IF EXISTS(SELECT 1/0) PRINT 'TRUE'
IF EXISTS(SELECT NULL) PRINT 'TRUE';
IF EXISTS(SELECT CAST('fish' AS int)) PRINT 'TRUE';
Для объяснения мы рассмотрим ANSI-92 SQL , ищем "Query expressions 191
".
Это случай 3а (жирный):
Если <select list> "*"
просто содержится в <subquery>
который сразу же содержится в <exists predicate>
, то
<select list>
эквивалентен <value expression>
, который
является произвольным <literal>
.
Итак, это говорит о том, что вы можете иметь любой старый мусор в бите EXISTS: его следует игнорировать