Điều này sẽ hoạt động nếu một bảng ở bên ngoài truy vấn có một cột tên đó. Điều này là do tên cột từ truy vấn bên ngoài có sẵn cho truy vấn con và bạn có thể cố ý chọn một cột truy vấn bên ngoài trong danh sách CHỌN truy vấn con của mình.
Ví dụ:
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)
Như Damien quan sát, cách an toàn nhất để bảo vệ bạn khỏi "gotcha" không quá rõ ràng này là tập thói quen định tính tên cột của bạn trong truy vấn con:
-- 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)