Você está na página 1de 3

Diferença entre Left, Right e Inner Join

Escrito por Marcos Rocha


Qui, 20 de Agosto de 2009 10:44

Se você é iniciante em Bancos de Dados ou ainda tem dúvidas sobre a utilização de Joins
entre tabelas, saiba que o procedimento é mais simples do que parece. Basta entender pra que
serve cada tipo de join e como eles trabalham. Sua experiência e persistência se encarregarão
de lhe ensinar qual utilizar nas situações do cotidiano.

Programas Utilizados
- Bancos de Dados (Firebird, Interbase, MySQL, etc.)
- Gerenciador de Bancos de Dados (IBExpert, IBOConsole, IBConsole, etc.)
- Tabelas abaixo
FILIAL
FIL_CODIGO  FIL_NOME
1           MATRIZ
2           FILIAL 1
3           FILIAL 2

FUNCIONARIOS
FUN_CODIGO  FIL_CODIGO  FUN_NOME
1           1           JOÃO
2           2           JOAQUIM
3           2           JOSÉ
4           3           MÁRCIO
5           null        PEDRO

Pequena História
Na verdade, utilizamos palavras em inglês, padronizadas pela ANSI (American National
Standards Institute), originalmente criada pela IBM com o nome de SEQUEL (Structured
English Query Language) e posteriormente abreviada para SQL, para efetuar consultas de
dados a um banco de dados relacional. Mas o que vem a ser um Join? Esta palavra em inglês
significa Unir ou União e a utilizamos quando precisamos buscar dados em outras tabelas
desde que satisfaça as condições para isso.
Porém ainda paira a dúvida: utilizo Join, Inner Join, Left Join, Right Join ou me jogo do 14º
Andar?
Esta história de direita e esquerda funciona em qualquer banco de dados relacional pois são
padrões definidos para se manter a compatibilidade entre os bancos de dados. Imagine você
como seria se para fazer uma busca no Firebird você tivesse de escrever:
SELECT * FROM FUNCIONARIOS
WHERE FIL_CODIGO = 1

E no DB2 fosse completamente diferente:


FROM FUNCIONARIOS WHERE FIL_CODIGO = 1 SELECT *

Isto certamente causaria um "Access Violation" em sua cabeça.

1/3
Diferença entre Left, Right e Inner Join

Escrito por Marcos Rocha


Qui, 20 de Agosto de 2009 10:44

Vamos ao que interessa.

Entendendo LEFT, RIGHT e INNER


Quando dizemos que a tabela será Left ou Right, estamos informando ao comando SQL que
ele deve obedecer o sentido para a Direita ou para a Esquerda, ou seja, ao utilizarmos Left Join
o banco de dados irá analisar a estrutura da tabela da Direita e comparar com a tabela da
Esquerda (leia-se Direita para a Esquerda), veja o desenho.

Left Join
Na primeira situação temos o Left Join, a seta está apontando para a tabela FUNCIONARIOS
simbolizando que a precedência é da tabela da Esquerda, então podemos dizer que no select
abaixo, serão listados todos os Funcionários, mesmo aqueles que não tem Filial cadastrada.
SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A
LEFT JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO

-- RESULTADO DA CONSULTA --
FUN_NOME  FIL_NOME
JOÃO      MATRIZ
JOAQUIM   FILIAL 1
JOSÉ      FILIAL 1
MÁRCIO    FILIAL 2
PEDRO     null
Repare que Pedro foi incluído no resultado, porém ele não possui uma Filial associada em seu
cadastro. Este tipo de Join é o mais utilizado quando não se tem certeza que todos os registros
possuem ligação entre as tabelas e também na maioria das vezes por questões de
desempenho.

Right Join
Na segunda situação foi utilizado o Right Join, também conhecido apenas por Join, que aponta
para a tabela FILIAL simbolizando a precedência da tabela da Direita, logo, concluímos que os

2/3
Diferença entre Left, Right e Inner Join

Escrito por Marcos Rocha


Qui, 20 de Agosto de 2009 10:44

dados da tabela Filial devem existir para que o registro seja trazido no Select.
SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A
RIGHT JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO
-- AINDA PODEMOS UTILIZAR SEM A PALAVRA RIGHT
/*
SELECT A.FUN_NOME, B.FIL_NOME FROM FUNCIONARIOS A
JOIN FILIAL B ON A.FIL_CODIGO = B.FIL_CODIGO
*/

-- RESULTADO DA CONSULTA --
FUN_NOME  FIL_NOME
JOÃO      MATRIZ
JOAQUIM   FILIAL 1
JOSÉ      FILIAL 1
MÁRCIO    FILIAL 2
Note que o funcionário Pedro desta vez não foi incluído na lista de resultados, isto ocorreu
porque esta consulta traz apenas registros onde existe um cadastro de Filial para o
Funcionário.

Inner Join
Temos ainda a situação do Inner Join que nada mais faz do que observar se existem registros
combinados em ambas as tabelas, ou seja, para que um registro seja incluído na lista de
resultados, o campo de ligação entre duas tabelas deve satisfazer as condições em ambas. O
resultado desta consulta seria algo muito semelhante ao Join.

Conclusão
Com algum conhecimento básico para interação entre tabelas, podemos efetuar consultas
complexas ao banco de dados envolvendo resultados perfeitamente controlados. Isto garante
não somente credibilidade em consultas mas também desempenho do sistema quando
utilizado corretamente. Ainda existem outros tipos de Join, porém seus resultados são
semelhantes ou seu uso é muito pouco frequente. Para quem quiser saber mais a respeito de
consultas SQL, basta ler um livro de Banco de Dados (qualquer um que seja pois todos tem
muito conteúdo sobre PL/SQL).

3/3

Você também pode gostar