अंतर यह है कि जब आप उपयोग करते हैं exists
- अंदर की क्वेरी आमतौर पर मुख्य क्वेरी पर निर्भर करती है (मतलब इससे कॉलम का उपयोग करता है और इसलिए इसे अलग से निष्पादित नहीं किया जा सकता है) और, इसलिए, मुख्य क्वेरी की प्रत्येक पंक्ति के लिए यह जांचता है कि सबक्वेरी द्वारा पुनर्प्राप्त कुछ डेटा मौजूद है या नहीं।पी>
आपकी पहली क्वेरी की समस्या यह है कि ब्लॉक के अंदर मौजूद सबक्वायरी किसी भी तरह से मुख्य क्वेरी कॉलम पर निर्भर नहीं है, यह एक अलग क्वेरी है जो हमेशा 1
के साथ एक पंक्ति लौटाती है , इसलिए, मुख्य क्वेरी की किसी भी पंक्ति के लिए exists
. का परिणाम हमेशा true
रहेगा . तो, आपकी पहली क्वेरी
SELECT distinct(company_id)
FROM user
WHERE user.user_id = 123
AND user.company_id IS NOT NULL
यह भी देखें fiddle