TGViewer
Data Science. SQL hub Data Science. SQL hub @sqlhub · 36K subscribers
Post #2420 3.99K
Хитрый SQL-совет: осторожнее с `NOT IN`

Кажется, что эти запросы делают одно и то же:


SELECT *
FROM users
WHERE id NOT IN (
SELECT user_id
FROM banned_users
);


Но если banned_users.user_id содержит хотя бы один NULL, запрос может вернуть ноль строк.

Надёжнее использовать NOT EXISTS:


SELECT u.*
FROM users AS u
WHERE NOT EXISTS (
SELECT 1
FROM banned_users AS b
WHERE b.user_id = u.id
);


Причина в трёхзначной логике SQL: сравнение с NULL даёт UNKNOWN, а не TRUE или FALSE.

Правило простое: если подзапрос потенциально возвращает NULL, вместо NOT IN почти всегда выбирайте NOT EXISTS.

#sql #postgresql #database
  • 🔥 18
  • 👍 8
  • ❤ 1
  • 🥰 1
More from @sqlhub
  1. Sep 21, 2026🧩 Сложная SQL-задача: симуляция DNS-кеша Есть таблица запросов: CREATE TABLE dns_requests…
  2. Sep 18, 2026🔥 PostgreSQL 19 задерживается релиз может сдвинуться на несколько недель или даже месяцев…
  3. Sep 17, 2026Участвуй во всероссийском ИТ-чемпионате МТС True Tech Champ 2026 c призовой фондом 10 250…
  4. Sep 17, 2026📌 NY Post: Anthropic - это культ Профессор Вашингтонского университета Педро Домингос в и…
  5. Sep 16, 2026Post #2492
  6. Sep 16, 2026Стать специалистом по Data Science всего за 10 недель — это реально! Если давно смотрите в…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →