Используйте LEFT JOIN и отберите строки, у которых ID присоединённого заказа равен NULL. Это отсутствие совпадения, а не заказ с пустым идентификатором.
Как найти пользователей без заказов через JOIN
Используйте LEFT JOIN и отберите строки, у которых ID присоединённого заказа равен NULL. Это отсутствие совпадения, а не заказ с пустым идентификатором.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Есть users(id) и orders(id, user_id), где orders.id не допускает NULL. Получите пользователей без заказов без подзапроса.
Ответ
Используйте LEFT JOIN и отберите строки, у которых ID присоединённого заказа равен NULL. Это отсутствие совпадения, а не заказ с пустым идентификатором.
Запрос:
SELECT u.id
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL;
Если искать отсутствие только оплаченных заказов, условие статуса нужно добавить в ON. Перенос его в WHERE может изменить внешнее соединение и потерять пользователей без совпадений.