O comando JOIN do SQL tem a função básica de agregar tabelas mediante um campo que faça sentido às mesmas.
Por exemplo, considerando o diagrama hipotético abaixo, caso eu queira como retorno todas as compras de um cliente, poderia retornar algo como:
SELECT * FROM cliente JOIN compra ON idcliente
Mas e se eu quero retornar somente os clientes que estão ligados a uma compra? Ou compras que não estão ligadas a nenhum cliente cadastrado?
Para esses tipos de consultas mais complexas existem uma série de complementos para o JOIN, dos quais os mais utilizados são INNER JOIN e LEFT JOIN, que permitem filtrar os resultados da junção entre tabelas. Esses “complementos” estão explicados a seguir.
INNER JOIN Exemplo
SELECT * FROM cliente INNER JOIN compra ON idcliente
Utilizando o INNER JOIN você terá como resultado de sua consulta somente os pares de cliente/compra, ou seja, os casos em que uma compra não está ligada a nenhum cliente, ou cliente que não possuem compras, não serão apresentados no resultado.
LEFT JOIN Exemplo
O LEFT JOIN traz todos os resultados da tabela mais à esquerda e o agrega ao seu valor correspondente das outras tabelas, caso existam. Ou seja, nesse caso a consulta retornaria todos os clientes e suas compras, caso existam. Caso não existam compras para essa cliente os campos relativos à tabela de compras ficariam em branco.
RIGHT JOIN Exemplo
SELECT * FROM cliente RIGHT JOIN compra ON idcliente
De forma análoga ao LEFT JOIN, o RIGHT JOIN traz todos os resultados da tabela mais à direita e o agrega ao seu valor correspondente das outras tabelas, caso existam. Ou seja, nesse caso a consulta retornaria todas as compras e, caso existam, seus clientes. Caso não existam clientes para essa compra os campos relativos à tabela de clientes ficariam em branco.
OUTER JOIN Exemplo
SELECT * FROM cliente OUTER JOIN compra ON idcliente
O comando OUTER JOIN, mesmo não sendo muito conhecido, pode ser bastante útil em alguns casos. Ele traria como resultado todos os clientes que não estão ligados à nenhuma compra.
BONUS 01: Descomplicando SQL Joins
Uma imagem vale mais do que mil palavras:
Bonus 2: Script de Banco de Dados SQL pronto
Um post com exemplos de consulta e criação de tabelas em SQL + Script de Banco de Dados SQL pronto.