SELECT something
FROM someTable
WHERE idcode NOT IN (SELECT ids FROM tmpIdTable)
проверява всяка стойност в списъка.
Но NOT IN не е толерантен към NULL. Ако подзаявката върне набор от стойности, които съдържат NULL, няма да бъдат върнати никакви записи. (Това е така, защото вътрешно NOT IN е оптимизиран за idcode <> 'foo' AND idcode <> 'bar' AND idcode <> NULL
и т.н., което винаги ще се провали, защото всяко сравнение с NULL дава UNKNOWN, предотвратявайки целия израз да стане TRUE.)
По-хубав, толерантен към NULL вариант би бил този:
SELECT something
FROM someTable
WHERE NOT EXISTS (SELECT ids FROM tmpIdTable WHERE ids = someTable.idcode)
РЕДАКТИРАНЕ:Първоначално предположих, че това:
SELECT something
FROM someTable
WHERE idcode <> (SELECT ids FROM tmpIdTable)
ще провери само срещу първата стойност. Оказва се, че това предположение е погрешно поне за SQL Server, където всъщност задейства неговата грешка:
Msg 512, Level 16, State 1, Line 1 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.