انتقل إلى محتوى الدرس

NULL Trap in NOT IN فخ NULL داخل NOT IN

افهم لماذا يؤدي وجود قيمة NULL واحدة داخل قائمة NOT IN إلى إرجاع صفر من الصفوف دائماً.
1 صفوف تعليمية
MySQL
7 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

يُعد وجود القيمة NULL داخل قائمة NOT IN (...) من أشهر الفخاخ المنطقية في لغة SQL على الإطلاق.

  • لماذا ينجو المعامل IN من NULL: يتحول التعبير x IN (10, 20, NULL) إلى x = 10 OR x = 20 OR x = NULL؛ فإذا كانت قيمة x هي 10 فإن النتيجة 1 OR 0 OR NULL تساوي 1 وتظهر الصفوف المطابقة طبيعياً.
  • لماذا يُعيد NOT IN صفراً من الصفوف: يتحول التعبير x NOT IN (10, 20, NULL) إلى x <> 10 AND x <> 20 AND x <> NULL؛ وبما أن x <> NULL يُعيد دائماً NULL، تصبح المعادلة 1 AND 1 AND NULL وتساوي NULL لكل صف في الجدول فيُستبعد الجميع!

لذلك احرص دائماً على خلو قوائم NOT IN تماماً من أي قيمة فارغة NULL.

SQL
-- Compare IN vs NOT IN when NULL is present in the list
SELECT (10 IN (10, 20, NULL))     AS in_with_null,
       (30 NOT IN (10, 20, NULL)) AS not_in_with_null,
       (30 NOT IN (10, 20))       AS safe_not_in;