Выбор ответа Junior JOIN обновлено

NULL в ключе соединения

Вопрос

В orders есть заказ с customer_id = NULL, и в customers случайно оказалась строка с id = NULL (допустим, без первичного ключа). Попадёт ли эта пара в результат orders JOIN customers ON customers.id = orders.customer_id?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Нет: NULL = NULL даёт unknown. Условие соединения проверяется так же, как WHERE: нужно true.

Варианты ответа

  1. Да: при соединении NULL равен NULL
  2. Да, но только в LEFT JOIN, а в JOIN нет
  3. Запрос завершится ошибкой о NULL в ключе
  4. Нет: NULL = NULL даёт unknownправильный ответ

Разбор

Условие соединения проверяется так же, как WHERE: нужно true. NULL = NULL это unknown, поэтому строки с NULL в ключе никогда не склеиваются. В LEFT JOIN заказ останется, но с NULL на месте клиента, то есть пары всё равно не будет. Ошибки нет. Если NULL действительно нужно считать равными, используют IS NOT DISTINCT FROM.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме