متى تختلف قيمة IN عن قيمة EXISTS رغم تشابه التصفية؟

متقدمقراءة دقيقةآخر تحديث 3 أكتوبر 2026

SQL قواعد البيانات

الإجابة

قد تختار IN وEXISTS الصفوف نفسها داخل WHERE، لكن ذلك لا يعني تطابق قيمتيهما المنطقيتين في كل حالة. يمكن أن تعيد IN القيمة NULL عندما لا تجد مساواة مؤكدة وتوجد قيمة مجهولة في المجموعة. أما EXISTS فيعيد نتيجة وجود محددة، إما صفرًا أو واحدًا.

يظهر الفرق بوضوح عند عرض الشرطين داخل SELECT بدل استخدامهما للتصفية. الاستعلام المترابط الذي يبحث عن مساواة لا يقبل مقارنة نتيجتها مجهولة، فلا يعيد صفًا مطابقًا. لذلك يكون اختبار وجوده صفرًا، بينما قد تبقى نتيجة اختبار العضوية مجهولة.

مثال

WITH numbers AS (
  SELECT NULL AS n
)
SELECT 5 IN (SELECT n FROM numbers) AS in_result,
       EXISTS (SELECT 1 FROM numbers WHERE n = 5) AS exists_result;

داخل WHERE، لا تقبل التصفية إلا الشرط المتحقق، ولذلك ترفض كلًا من الصفر وNULL. هذا يفسر تشابه الصفوف المختارة مع اختلاف القيم المعروضة.

باختصار: تكافؤ التصفية لا يضمن تطابق قيمة التعبير عند عرض IN وEXISTS مباشرة.

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

اختبر فهمك

ما الزوج الناتج بالترتيب (in_result, exists_result)؟

CREATE TABLE orders (
  id INT PRIMARY KEY,
  customer_id INT NULL
);
INSERT INTO orders (id, customer_id) VALUES (1, NULL);

SELECT 5 IN (SELECT customer_id FROM orders) AS in_result,
       EXISTS (
         SELECT 1 FROM orders WHERE customer_id = 5
       ) AS exists_result;