यह काम करेगा यदि बाहरी . में एक तालिका query में उस नाम का एक कॉलम है। ऐसा इसलिए है क्योंकि बाहरी क्वेरी से कॉलम नाम सबक्वेरी के लिए उपलब्ध हैं, और आप जानबूझकर अपनी सबक्वायरी SELECT सूची में बाहरी क्वेरी कॉलम का चयन करने के लिए अर्थपूर्ण हो सकते हैं।
उदाहरण के लिए:
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)
जैसा कि डेमियन देखता है, इस गैर-स्पष्ट "गॉचा" से खुद को बचाने का सबसे सुरक्षित तरीका सबक्वेरी में अपने कॉलम नामों को योग्य बनाने की आदत डालना है:
-- 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)