SELECT something
FROM someTable
WHERE idcode NOT IN (SELECT ids FROM tmpIdTable)
controleert elke waarde in de lijst.
De NOT IN is echter niet NULL-tolerant. Als de subquery een set waarden retourneerde die NULL bevatten, zouden er helemaal geen records worden geretourneerd. (Dit komt doordat de NOT IN intern is geoptimaliseerd voor idcode <> 'foo' AND idcode <> 'bar' AND idcode <> NULL
enz., wat altijd zal mislukken omdat elke vergelijking met NULL ONBEKEND oplevert, waardoor wordt voorkomen dat de hele uitdrukking ooit WAAR wordt.)
Een mooiere, NULL-tolerante variant zou deze zijn:
SELECT something
FROM someTable
WHERE NOT EXISTS (SELECT ids FROM tmpIdTable WHERE ids = someTable.idcode)
EDIT:Ik ging er aanvankelijk van uit dat dit:
SELECT something
FROM someTable
WHERE idcode <> (SELECT ids FROM tmpIdTable)
zou alleen tegen de eerste waarde controleren. Het blijkt dat deze veronderstelling onjuist is, althans voor SQL Server, waar het zijn fout daadwerkelijk veroorzaakt:
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.