Этот код действителен тогда и только тогда, когда из tmpIdTable не найдено ни одной строки или единственной строки:
SELECT something
FROM someTable
WHERE idcode <> (SELECT ids FROM tmpIdTable)
Если будет возвращено несколько строк, вы получите сообщение об ошибке:
Сообщение 512, Уровень 16, Состояние 1, Строка 1
Подзапрос вернул более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.
Это та же самая ошибка, которую вы получаете, используя вложенный скаляр, неожиданно выдает несколько строк, например:
ВЫБРАТЬ *, (ВЫБРАТЬ БЛА ОТ t1 ГДЕ и т. Д.) ОТ t2
Ничто не изменило WRT в SQL Server за десятилетие, поэтому я ожидаю, что предположения о вложенном запросе в исходном коде были нарушены.
Если строки не возвращаются, результат будет пустым, поскольку <> NULL
никогда не имеет значения true (предположим, ANSI NULL).
Этот код действителен для любого количества строк:
SELECT something
FROM someTable
WHERE idcode NOT IN (SELECT ids FROM tmpIdTable)
Тем не менее, могут быть проблемы с NULL.