Boa noite pessoal!
Navegando pela internet, me deparei com um ótimo guia visual sobre os JOINs. Como o próprio autor do guia visual disse “As coisas parecem fazer sentido com imagens. Eu olhei pela internet por uma boa representação gráfica dos SQL JOINs, mas não pude encontrar nada que me agradasse.” (tradução livre), concordo com o autor, pois muitos exemplos pela internet complicam mais do que explicam como funcionam os JOINs, mas o guia que ele desenvolveu ficou muito bom.
Alguns vão achar este tópico um pouco “básico” em comparação aos que tenho escrito, mas eu e muitas pessoas que indiquei o guia inglês acharam este guia muito interessante, e com este post estarei “traduzindo” o guia, esperando que seja de utilidade didática e até mesmo pessoal para vocês. Principalmente para que aprendamos como expressar melhor conceitos para nós são tão simples, mas que muitas vezes não sabemos explicar de uma forma adequada.
Irei abordadar neste post sete diferentes formas de retornar dados de duas tabelas relacionadas, mas além destes existem outros JOINS. Os JOINs demonstrados serão os seguintes:
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- OUTER JOIN
- LEFT JOIN “excluindo” INNER JOIN
- RIGHT JOIN “excluindo” INNER JOIN
- OUTER JOIN “excluindo” INNER JOIN
Obs.: Os JOINs 5, 6 e 7 são na verdade variações dos anteriores, mas ainda podem ser considerados JOINs, devido aos seus comportamentos.
INNER JOIN

Este é simples, o mais entendível e o mais comum. Esta consulta retornará todos os registros da tabela esquerda (tabela A) que têm correspondência com a tabela direita (tabela B). Podemos escrever este JOIN da seguinte forma:
SELECT *
FROM A
INNER JOIN B
ON A.Key = B.KeyLEFT JOIN

Esta consulta retorna todos os registros da tabela esquerda (tabela A) e as correspondências que existirem com a tabela direita (tabela B). O código ficará da seguinte forma:
SELECT *
FROM A
LEFT JOIN B
ON A.Key = B.KeyRIGHT JOIN
Esta consulta retornará todos os registros da tabela direita (tabela B) e as correspondências que existirem com a tabela esquerda (tabela A). O código ficará da seguinte forma:
SELECT *
FROM A
RIGHT JOIN B
ON A.Key = B.KeyOUTER JOIN

Este JOIN também é conhecido como FULL OUTER JOIN ou FULL JOIN. Esta consulta retornará todos os registros das duas tabelas e juntando também os registros correspondentes entres as duas tabelas. O código ficará da seguinte forma:
SELECT *
FROM A
FULL OUTER JOIN B B
ON A.Key = B.KeyLEFT Excluding JOIN

Esta consulta retornará apenas os registros da tabela esquerda que não têm correspondência com a tabela direita. O código ficará da seguinte forma:
SELECT *
FROM A
LEFT JOIN B
ON A.Key = B.Key
WHERE B.Key IS NULLRIGHT “excluindo” JOIN

Esta consulta retornará todos os registros da tabela esquerda que não têm correspondência com a tabela direita. O código ficará da seguinte forma:
SELECT *
FROM A
RIGHT JOIN B
ON A.Key = B.Key
WHERE A.Key IS NULLOUTER “excluindo” JOIN

Esta consulta retornará todos os registros das duas tabelas que não têm correspondência. O código ficará da seguinte forma:
SELECT *
FROM A
FULL OUTER JOIN B
ON A.Key = B.Key
WHERE A.Key IS NULL OR B.Key IS NULLPara quem tiver interesse na figura completa com os JOINs demonstrados, segue abaixo o link:
O autor do artigo original se chama C.L. Moffatt, quem tiver interesse no artigo original e os exemplos que este autor utilizou, segue o link abaixo:
http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx

Melhor conteúdo sobre joins na internet, sabendo isso, pode-se montar qualquer query!
parabéns
Nedio, mesmo que não seja só de JOINs que se faz uma query, o artigo do C.L. Moffatt ficou bem claro e objetivo.
Obrigado pelo comentário! Qualquer dúvida pode me contatar que estarei disposto a esclarecer.
Somente elogios…
Estou há um tempinho sem usar sql e esse artigo caiu como uma luva. Imagens com explicação rápida, um casamento perfeito. Parabéns.
Sem comentários!
Muito bom.
Muito bom o post
Tem muita gente que se perde com os Joins por nao saber usa-los, deixou de uma forma clara, com as imagens nao tem erro.
Obrigado pelos comentários!!!
Só para não dizer que não entro no seu blog… entrei…
Muito bom!
Parabéns!
Nossa! Então era isso? kkkk
Sem dúvidas! Não poderia ser explicado melhor!
Excelente explicação.
Existem pessoas que sabem transformar um assunto dificil em uma coisa muito simples.
Muito bom seu artigo, estava a dias quebrando kbç.mais com essa explicaçao clara e objetiva consegui resolver meu problama com o INNER JOIN.
é q sou novato em programaçao e me indentifiquei mais com PHP.
Valeu, Obrigado.
Muito interessante… pra mim que estou apanhando caiu como luvas!