You are on page 1of 2

Diferena entre Left, Right e Inner Join

PiorMelhor
Se voc iniciante em Bancos de Dados ou ainda tem dvidas sobre a utilizao de Joins en
tre tabelas, saiba que o procedimento mais simples do que parece. Basta entender
pra que serve cada tipo de join e como eles trabalham. Sua experincia e persistnc
ia se encarregaro de lhe ensinar qual utilizar nas situaes 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 JOO
2 2 JOAQUIM
3 2 JOS
4 3 MRCIO
5 null PEDRO
Pequena Histria
Na verdade, utilizamos palavras em ingls, padronizadas pela ANSI (American Nation
al Standards Institute), originalmente criada pela IBM com o nome de SEQUEL (Str
uctured English Query Language) e posteriormente abreviada para SQL, para efetua
r consultas de dados a um banco de dados relacional. Mas o que vem a ser um Join
? Esta palavra em ingls significa Unir ou Unio e a utilizamos quando precisamos bu
scar dados em outras tabelas desde que satisfaa as condies para isso.
Porm ainda paira a dvida: utilizo Join, Inner Join, Left Join, Right Join ou me jo
go do 14 Andar?
Esta histria de direita e esquerda funciona em qualquer banco de dados relacional
pois so padres definidos para se manter a compatibilidade entre os bancos de dado
s. Imagine voc como seria se para fazer uma busca no Firebird voc tivesse de escre
ver:
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 cabea.
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 u
tilizarmos Left Join o banco de dados ir analisar a estrutura da tabela da Direit
a e comparar com a tabela da Esquerda (leia-se Direita para a Esquerda), veja o
desenho.
Left e Right Join
Left Join
Na primeira situao temos o Left Join, a seta est apontando para a tabela FUNCIONARI
OS simbolizando que a precedncia da tabela da Esquerda, ento podemos dizer que no
select abaixo, sero listados todos os Funcionrios, mesmo aqueles que no 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
JOO MATRIZ
JOAQUIM FILIAL 1
JOS FILIAL 1
MRCIO FILIAL 2
PEDRO null
Repare que Pedro foi includo no resultado, porm ele no possui uma Filial associada
em seu cadastro. Este tipo de Join o mais utilizado quando no se tem certeza que
todos os registros possuem ligao entre as tabelas e tambm na maioria das vezes por
questes de desempenho.
Right Join
Na segunda situao foi utilizado o Right Join, tambm conhecido apenas por Join, que
aponta para a tabela FILIAL simbolizando a precedncia da tabela da Direita, logo,
conclumos que os dados da tabela Filial devem existir para que o registro seja t
razido 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
JOO MATRIZ
JOAQUIM FILIAL 1
JOS FILIAL 1
MRCIO FILIAL 2
Note que o funcionrio Pedro desta vez no foi includo na lista de resultados, isto o
correu porque esta consulta traz apenas registros onde existe um cadastro de Fil
ial para o Funcionrio.
Inner Join
Temos ainda a situao do Inner Join que nada mais faz do que observar se existem re
gistros combinados em ambas as tabelas, ou seja, para que um registro seja includ
o na lista de resultados, o campo de ligao entre duas tabelas deve satisfazer as c
ondies em ambas. O resultado desta consulta seria algo muito semelhante ao Join.
Concluso
Com algum conhecimento bsico para interao entre tabelas, podemos efetuar consultas
complexas ao banco de dados envolvendo resultados perfeitamente controlados. Ist
o garante no somente credibilidade em consultas mas tambm desempenho do sistema qu
ando utilizado corretamente. Ainda existem outros tipos de Join, porm seus result
ados so 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 contedo sobre PL/SQL).

You might also like