INNER JOIN vs LEFT JOIN: разница с примерами на собесе

INNER JOIN и LEFT JOIN — два самых частых типа соединений. Разница в том, как они обрабатывают строки без пары: INNER их отбрасывает, LEFT сохраняет с NULL в правых колонках. На собесе проверяют понимание именно этой механики.

Если коротко. INNER JOIN возвращает только пересечение, LEFT JOIN — все строки левой таблицы + совпадения справа (или NULL).
Проверь себя · 1/3разбор после ответа
В таблицах orders и users есть одноимённые столбцы: user_id, updated_at, status. Аналитик пишет SELECT * FROM orders NATURAL JOIN users. Что произойдёт?

INNER JOIN vs LEFT JOIN: таблица различий

ПараметрINNER JOINLEFT JOIN
ВозвращаетТолько совпаденияВсе левые + совпадения
Что с строками без парыОтбрасываетОставляет, правая часть = NULL
Размер результата≤ min(L, R)≥ L
Чувствителен к порядкуНет (A ⨝ B = B ⨝ A)Да (A ⟕ B ≠ B ⟕ A)
Поиск «потеряшек»Не подходитПодходит (WHERE right.id IS NULL)

Когда использовать INNER JOIN

Когда использовать LEFT JOIN

На примере

INNER JOIN — только клиенты с заказами
SELECT c.id, COUNT(o.id) AS orders
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id
GROUP BY c.id;
LEFT JOIN — все клиенты + их заказы
SELECT c.id, COUNT(o.id) AS orders
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.id;     -- клиенты без заказов попадут со значением 0

Ловушка на собесе

Лайфхак с интервью: если делаете LEFT JOIN ... WHERE right.something = X, JOIN превращается в эффективный INNER (NULL не пройдёт фильтр). Условие на правую таблицу пишите в ON, а не в WHERE.
Тренировать SQL в Telegram

Ещё сравнения по теме