In SQL è possibile inserire una query SQL all'interno di un'altra query nota come subquery. In una sottoquery, il risultato della query esterna dipende dal set di risultati della sottoquery interna. Per esempio:
SELECT *
FROM customers
WHERE age = (
SELECT MIN(age)
FROM customers
);
SELECT customer_id, name
FROM customers
WHERE customer_id IN (
SELECT customer_id
FROM orders
);
In alcuni casi, possiamo ottenere lo stesso set di risultato utilizzando una sottoquery e la clausola JOIN. Per esempio il set di risultati di questa query:
SELECT DISTINCT customers.customer_id, customers.name
FROM customers INNER JOIN orders
ON (customers.customer_id = orders.customer_id)
ORDER BY customers.customer_id;
sarà lo stesso di questa query:
SELECT customer_id, name
FROM customers
WHERE customer_id IN (
SELECT customer_id
FROM orders
);
JOIN invece di una sottoquery, perché la velocità di esecuzione di JOIN è più veloce ed ottimizzata di una sottoquery.