شبكة تعلم مع ناو

لماذا قد لا تعيد NOT IN نتائج عند وجود NULL في القائمة؟

تُستخدم NOT IN لاختيار القيم التي لا تساوي أي عنصر في قائمة. لكن وجود NULL داخل القائمة يغير سلوك المقارنة، لأن NULL تمثل قيمة غير معروفة. إذا لم تطابق قيمة الصف العناصر المعروفة، تظل المقارنة مع العنصر المجهول غير محسومة، فلا يصبح شرط NOT IN صحيحًا لهذا الصف.

تحتفظ WHERE بالصفوف التي يكون شرطها صحيحًا فقط، وتستبعد الحالات غير المعروفة. لذلك قد يعيد الاستعلام نتيجة فارغة رغم وجود قيم لا تساوي الأرقام المكتوبة صراحة في القائمة. كذلك فإن قيمة العمود NULL نفسها لا تُختار تلقائيًا باستخدام NOT IN. عند بناء قائمة استبعاد عادية، يجب الانتباه إلى القيم الغائبة وعدم افتراض أنها عنصر يمكن تجاهله كما يحدث في بعض دوال التجميع.

مثال

CREATE TABLE planets_not_in_example (id INT);
INSERT INTO planets_not_in_example VALUES (1), (2), (3);
SELECT id FROM planets_not_in_example WHERE id NOT IN (1, NULL);

باختصار: وجود NULL في قائمة NOT IN قد يمنع تحقق الشرط لجميع الصفوف.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر نفسك

خمسة أسئلة سريعة، مع الإجابة والشرح بعد كل سؤال.