O comando JOIN no SQL Server é muito útil quando você precisar unir linhas e colunas de uma tabela para trazer um determinado resultado. Ele também traz a diferença entre as tabelas ou valores equivalentes de ambas. Ele consegue filtrar os dados e retornar apenas o que você quer analisar.
Quais tipos de JOIN existe e como eles funcionam?
Bom existem 5 tipos de JOIN, sendo que cada um deles podem ser usados para trazer os dados de várias formas e auxiliando a gerenciar as análises desses dados.
Os tipos são:
INNER JOIN
FULL JOIN
LEFT JOIN
RIGHT JOIN
CROSS JOIN
Vamos começar com o comando INNER JOIN
Basicamente o comando INNER JOIN traz para nós o resultado de uma intersecção entre as tabelas. Ou seja, ele vai dar como resultado os dados que são iguais entre a tabela A e a Tabela B.
Vamos ver na prática alguns exemplos de JOINS utilizando as tabelas abaixo, A e B...
A sintaxe para o comando é: SELECT A.id1, B.id2 FROM TabelaA as A INNER JOIN TabelaB as B ON A.ID1 = B.ID2
Reparem que baseado em nossas duas tabelas, o resultado que tivemos foram os valores: A, B e C. Como foi explicado anteriormente, o INNER JOIN trás somente os valores que estiverem em intersecção, ou seja, os valores D e o valor E não existem na tabela B, então não foram retornados.
FULL JOIN
O FULL JOIN é de certa forma bem mais simples de entender pois ele retorna todos os dados que existem tanto na Tabela A quanto na Tabela B. É como se você estivesse dando um SELECT * nas duas tabelas.
A sintaxe para o comando é: SELECT * FROM TabelaA as A FULL OUTER JOIN TabelaB as B ON A.ID1 = B.ID2
Como podemos ver na imagem acima, eu dei um SELECT * nas duas tabelas para facilitar de forma visual o seu entendimento. O comando trouxe como resultado todos os dados das tabelas A e B sendo que as linhas que não estão em intersecção são retornadas como valor NULL.
LEFT JOIN
Esse comando tem como prioridade retornar todos os dados que estão na tabela a esquerda, mas ainda assim trazendo a intersecção com a tabela da direita e ignorando todo o resto dos dados dessa tabela. Lembrando que se não for encontrar uma intersecção entre alguma linha das tabelas o comando retornará os valores como valor NULL. No script abaixo ele vai retornar todos os dados que estão na Tabela A. Lembrando que a tabela a esquerda é sempre a que aparece após o comando FROM.
Observe a sintaxe:
SELECT A.Nome , B.Nome FROM tabelaA as A LEFT JOIN tabelaB as B ON A.ID1 = B.ID2
Nessa imagem da pra ver que ele deu prioridade em trazer todo o conteúdo da Tabela A (tabela da esquerda) e também trouxe a intersecção com a Tabela B. E como foi dito anteriormente, ele também traz os valores nulos da tabela à direita.
RIGHT JOIN
Muito similar ao seu companheiro LEFT JOIN. O RIGHT JOIN da prioridade em trazer todos os dados da direita e sua sintaxe também é similar à do LEFT JOIN. Ele trata da mesma maneira a questão da falta de valores fora da intersecção serem retornado como valores NULL.
Sintaxe:
SELECT A.Nome, B.Nome FROM TabelaA as A RIGHT JOIN TabelaB as B ON A.nome = B.nome
Nesse exemplo eu fiz um pequeno INSERT na tabela B. Eu inserir os valores F e G para que ficasse mais visível que assim como o LEFT JOIN, o comando RIGHT além de trazer os valores da tabela à direita também retorna as linhas que estão na intersecção e os valores que não estão também são retornados como NULL.
CROSS JOIN
O último mais não menos importante. O CROSS JOIN pode ser um pouco mais complexo parar entender, vamos dar um exemplo: Na tabela A existem o valor 1,2 e 3. Já na tabela B existem os valores 1,2,3,4,5,6. O comando CROSS faz com que tanto o valor 1 e o 2 da tabela A sejam retornados 6 vezes com cada um dos valores da tabela B. Esse processo é conhecido também como produto cartesiano. Vejam a sintaxe e uma imagem para maior entendimento: FROM TabelaA as A CROSS JOIN TabelaB as B
Reparem que todos os valores da Tabela A foram retornados com um dos valores da Tabela B. Esse é o famoso produto cartesiano. Conclusão Como descobrimos o comando JOIN é muito útil pra facilitar a filtragem de dados e criar consultas que necessitam de um certo nível de complexidade, sendo ao mesmo tempo uma forma simples e prática.