В таблицах orders и users есть одноимённые столбцы: user_id, updated_at, status. Аналитик пишет SELECT * FROM orders NATURAL JOIN users. Что произойдёт?

AСоединение пройдёт по user_id: NATURAL JOIN берёт первый общий столбец и игнорирует остальные
BЗапрос вернёт ошибку: NATURAL JOIN не поддерживается в PostgreSQL для пользовательских таблиц
CСоединение пройдёт по столбцу id обеих таблиц: NATURAL JOIN выбирает столбец с именем id
DСоединение пройдёт по всем одноимённым столбцам сразу: user_id, updated_at и status войдут в ON
Правильный ответ. NATURAL JOIN автоматически соединяет по всем столбцам с одинаковыми именами — здесь по user_id, updated_at и status, что почти наверняка не то, что нужно.

Разбор

NATURAL JOIN находит все пары одноимённых столбцов и использует их как условие ON. Если помимо user_id совпадают updated_at и status, соединение потребует совпадения всех трёх — это резко сократит результат или вернёт пустую таблицу. Добавление нового столбца с тем же именем в любую таблицу молча сломает запрос. Поэтому NATURAL JOIN считается опасным в продакшне, и обычно используют явный JOIN ... ON с перечислением ключей.

Проверь себя · 1/3разбор после ответа
Два запроса: SELECT * FROM orders JOIN users ON orders.user_id = users.user_id и SELECT * FROM orders JOIN users USING(user_id). В чём ключевое ограничение USING?
Тренировать SQL в Telegram

Ещё вопросы по теме «JOIN и операции множеств»