SELECT something
FROM someTable
WHERE idcode NOT IN (SELECT ids FROM tmpIdTable)
memeriksa nilai apa pun dalam daftar.
Namun, NOT IN tidak toleran NULL. Jika sub-kueri mengembalikan sekumpulan nilai yang berisi NULL, tidak ada catatan yang akan dikembalikan sama sekali. (Ini karena secara internal NOT IN dioptimalkan menjadi idcode <> 'foo' AND idcode <> 'bar' AND idcode <> NULL
dll., yang akan selalu gagal karena perbandingan apa pun dengan NULL menghasilkan UNKNOWN, mencegah seluruh ekspresi menjadi TRUE.)
Varian yang lebih baik dan toleran NULL adalah ini:
SELECT something
FROM someTable
WHERE NOT EXISTS (SELECT ids FROM tmpIdTable WHERE ids = someTable.idcode)
EDIT:Awalnya saya berasumsi bahwa ini:
SELECT something
FROM someTable
WHERE idcode <> (SELECT ids FROM tmpIdTable)
akan memeriksa terhadap nilai pertama saja. Ternyata asumsi ini salah setidaknya untuk SQL Server, di mana itu benar-benar memicu kesalahannya:
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.