Ini akan berfungsi jika tabel di luar kueri memiliki kolom dengan nama itu. Ini karena nama kolom dari kueri luar tersedia untuk subkueri, dan Anda mungkin sengaja memilih kolom kueri luar dalam daftar PILIH subkueri Anda.
Misalnya:
CREATE TABLE #test_main (colA integer)
CREATE TABLE #test_sub (colB integer)
-- Works, because colA is available to the sub-query from the outer query. However,
-- it's probably not what you intended to do:
SELECT * FROM #test_main WHERE colA IN (SELECT colA FROM #test_sub)
-- Doesn't work, because colC is nowhere in either query
SELECT * FROM #test_main WHERE colA IN (SELECT colC FROM #test_sub)
Seperti yang diamati Damien, cara teraman untuk melindungi diri Anda dari "gotcha" yang tidak terlalu mencolok ini adalah dengan membiasakan mengkualifikasikan nama kolom Anda di subquery:
-- Doesn't work, because colA is not in table #test_sub, so at least you get
-- notified that what you were trying to do doesn't make sense.
SELECT * FROM #test_main WHERE colA IN (SELECT #test_sub.colA FROM #test_sub)