Tecnica
Anti-join
Le righe di una tabella che non hanno corrispondenza in un'altra: i clienti che non hanno mai ordinato.
SELECT c.*
FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);
Stesso risultato con LEFT JOIN … WHERE o.customer_id IS NULL. Evita NOT IN (subquery): basta un NULL nella
subquery e non restituisce nulla.
SELECT c.customer_id, c.first_name, c.last_name FROM customers c WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id) ORDER BY c.customer_id LIMIT 5;
| customer_id | first_name | last_name |
|---|---|---|
| 4 | Elsa | Richard |
| 5 | Louis | Martinez |
| 7 | Tom | Dupont |
| 9 | Jade | Meier |
| 12 | Sacha | Dumont |