बिल्कुल। NULL
किसी अज्ञात मान का प्रतिनिधित्व करता है, किसी विशिष्ट मान का नहीं (यह NULL
. जैसा नहीं है) सी में, या NULL
रूबी में, आदि) SQL में, यदि आप किसी चीज़ की तुलना अज्ञात मान से करते हैं, तो परिणाम भी अज्ञात होता है। और आपको वे पंक्तियाँ नहीं मिलेंगी जहाँ WHERE
स्थिति अज्ञात है।
इसे आजमाएं:
SELECT NULL <> 2;
और आप देखेंगे NULL
परिणाम के रूप में।
इसे आजमाएं:
SELECT * FROM t WHERE NULL;
और कोई पंक्ति नहीं निकलेगी, भले ही तालिका t
बहुत बड़ा है।
अगर आपको वास्तव में वह चाहिए जो आपने कहा था (और मैं इसकी वकालत नहीं कर रहा हूं), तो आप ऐसा कुछ कर सकते हैं:
SELECT T.f1, T.f2
FROM (SELECT NULL f1, 'a' f2) T
WHERE ((T.f1 IS NULL OR T.f2 IS NULL)
AND (T.f1 IS NOT NULL OR T.f2 IS NOT NULL))
OR T.f1 <> T.f2