Sei sulla pagina 1di 10

Muitos desenvolvedores tem a dificuldade de saber qual resultado retornado de cada join no SQL.

Por
conta disso, esse artigo foi desenvolvido com base em estudos e consultas na prtica. A Figura 1 vai nos
ajudar a entender os resultados obtidos de cada join.

Figura 1 - Joins em SQL.


Em cima dessa figura, vamos criar a estrutura e realizar as consultas usando cada join.
Para isso, o primeiro passo criar as tabelas A e B, conforme mostra o cdigo da Listagem 1.
Mais ateno: este post no tem o foco de melhores prticas, normalizao etc. por isso, sero criadas apenas
duas tabelas simples com apenas um campo chamado nome para visualizar o resultado de cada join.
Listagem 1 - Criando as tabelas.
CREATE TABLE TabelaA(
Nome varchar(50) NULL
)
GO
CREATE TABLE TabelaB(
Nome varchar(50) NULL
)

J o segundo passo inclui a insero de valores nas tabelas A e B. A Listagem 2 exibe os valores que sero
includos nas tabelas A e B.

Listagem 2 - Incluso de dados nas tabelas.


INSERT
INSERT
INSERT
INSERT

INTO
INTO
INTO
INTO

TabelaA
TabelaA
TabelaA
TabelaA

VALUES('Fernanda')
VALUES('Josefa')
VALUES('Luiz')
VALUES('Fernando')

INSERT
INSERT
INSERT
INSERT

INTO
INTO
INTO
INTO

TabelaB
TabelaB
TabelaB
TabelaB

VALUES('Carlos')
VALUES('Manoel')
VALUES('Luiz')
VALUES('Fernando')

Agora, vamos analisar cada um dos joins.

Inner Join
Usando o inner join, conforme mostra a Figura 2, teremos como resultado todos os registros comuns nas
duas tabelas.

Figura 2 - Usando Inner Join.

Para isso executaremos os comandos presentes na Listagem 3.


Listagem 3 - Usando Inner Join
SELECT a.Nome, b.Nome
FROM TabelaA as A
INNER JOIN TabelaB as B
on a.Nome = b.Nome

Na prtica, o resultado ser conforme a Figura 3.

Figura 3 - Retorno do Inner Join.

Left Join
Usando o Left Join, conforme mostra a Figura 4, teremos como resultado todos os registros que esto na
tabela A (mesmo que no estejam na tabela B) e os registros da tabela B que so comuns na tabela A. Para
entender melhor, executaremos o cdigo presente na Listagem 4.

Figura 4 - Usando Left Join


Listagem 4 - Usando Left Join
SELECT a.Nome, b.Nome
FROM TabelaA as A
LEFT JOIN TabelaB as B
on a.Nome = b.Nome

E na prtica o resultado ser conforme a Figura 5.

Figura 5 - Retorno do Left Join.

Right Join
Usando o Right Join, conforme mostra a Figura 6, teremos como resultado todos os registros que esto na
tabela B (mesmo que no estejam na tabela A) e os registros da tabela A que so comuns na tabela B. Para
vermos isso na prtica, executaremos os comandos da Listagem 5.

Figura 6 - Usando Right Join

Listagem 5 -Usando Right Join


SELECT a.Nome, b.Nome
FROM TabelaA as A
RIGHT JOIN TabelaB as B
on a.Nome = b.Nome

O resultado desses comando ser o mesmo apresentado na Figura 7.

Figura 7 - Retorno do Right Join.

Outer Join
Usando o Outer Join (conhecido por Full Outer Join ou Full Join), conforme mostra a Figura 8, teremos
como resultado todos os registros que esto na tabela A e todos os registros da tabela B. Na prtica, voc
deve executar os mesmos comando presentes na Listagem 6.

Figura 8 - Usando Full Outer Join e Full Join

Listagem 6 -Usando Full Outer Join ou Full Join


SELECT a.Nome, b.Nome
FROM TabelaA as A
FULL OUTER JOIN TabelaB as B
on a.Nome = b.Nome
SELECT a.Nome, b.Nome
FROM TabelaA as A
FULL JOIN TabelaB as B
on a.Nome = b.Nome

E na prtica o resultado ser conforme a Figura 9.

Figura 9 - Retorno do Full Outer Join ou Full Join

Left Excluding Join


Na Figura 10 temos o uso do Left Excluding Join, que retorna como resultado todos os registros que esto
na tabela A e que no estejam na tabela B. Os comandos desses join esto presentes na Listagem 7 e o
resultado desses comandos so apresentados na Figura 11.

Figura 10 - Usando Left Excluding Join


Listagem 7 - Usando Left Excluding Join
SELECT a.Nome, b.Nome
FROM TabelaA as A
LEFT JOIN TabelaB as B
on a.Nome = b.Nome
WHERE b.Nome is null

Figura 11 - Retorno do Left Excluding Join

Right Excluding Join


Usando o Right Excluding Join, conforme mostra a Figura 12, teremos como resultado todos os registros
que esto na tabela B e que no estejam na tabela A. Para vermos isso na prtica, precisamos executar os
comandos da Listagem 8. Como resultado, teremos os mesmos registros retornados na Figura 13.

Figura 12 - Usando Right Excluding Join.


Listagem 8 - Usando Right Excluding Join.
SELECT a.Nome, b.Nome
FROM TabelaA as A
RIGHT JOIN TabelaB as B
on a.Nome = b.Nome
WHERE a.Nome is null

Figura 13 - Retorno do Right Excluding Join.

Outer Excluding Join


Usando o Outer Excluding Join, conforme mostra a Figura 14, teremos como resultado todos os registros
que esto na tabela B (que no estejam na tabela A) e todos os registros que esto na tabela A (que no
estejam na tabela B).

Figura 14 - Usando Outer Excluding Join


Para isso, executaremos o comando da Listagem 9.
Listagem 9 - Usando Outer Excluding Join
SELECT a.Nome, b.Nome
FROM TabelaA as A
FULL OUTER JOIN TabelaB as B
on a.Nome = b.Nome
WHERE a.Nome is null or b.Nome is null
SELECT a.Nome, b.Nome
FROM TabelaA as A
FULL JOIN TabelaB as B
on a.Nome = b.Nome
WHERE a.Nome is null or b.Nome is null

E na prtica o resultado ser conforme a Figura 15.

Figura 15 - Retorno do Outer Excluding Join

Potrebbero piacerti anche