¿Qué consulta lista los clientes que NO tienen pedidos?
Opciones
SELECT * FROM customers c WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id)(Opción correcta)SELECT * FROM customers c WHERE c.orders = 0 OR c.orders IS NULL OR c.order_count < 1SELECT * FROM customers c INNER JOIN orders o ON o.customer_id = c.id WHERE o.id IS NULLSELECT c.* FROM customers c WHERE c.id NOT IN (SELECT o.id FROM orders o) AND c.active
Respuesta
SELECT * FROM customers c WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id)
Por qué
NOT EXISTS con una subconsulta correlacionada comprueba, para cada cliente, si alguna fila de pedido apunta a él. Si no hay ninguna, devuelve el cliente.
Equivalente: LEFT JOIN orders o ON o.customer_id = c.id WHERE o.id IS NULL (anti-join).
Cuidado con NOT IN (subquery): si la subconsulta devuelve algún NULL, el resultado queda vacío. NOT EXISTS evita este problema.
SELECT c.*
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.id IS NULL;Recuerda
Clientes sin pedidos: LEFT JOIN ... IS NULL, o NOT EXISTS.