EXISTS, NOT EXISTS и IN — это SQL-операторы для фильтрации строк на основе результатов подзапросов или списков значений, но работают они по-разному в ключевых аспектах.
Это самое критичное различие, которое нужно понимать:
NULL, всё условие NOT IN вычисляется как UNKNOWN, и строки не возвращаются-- Опасно: не возвращает строки, если подзапрос содержит NULL
WHERE id NOT IN (SELECT customer_id FROM orders)
-- Безопасная альтернатива
WHERE NOT EXISTS (SELECT 1 FROM orders WHERE orders.customer_id = customers.id)
Отдавай предпочтение EXISTS / NOT EXISTS для коррелированных подзапросов и там, где важна корректная обработка NULL. Используй IN только для небольших заранее известных списков значений, где NULL заведомо отсутствуют.
Оператор EXISTS прекращает обработку и возвращает true, как только находит хотя бы одну совпадающую строку в подзапросе, что делает его потенциально более эффективным, чем IN для больших наборов результатов.
Новый — ещё не проверен сообществом
Вы