Participo de algumas listas de discussão sobre PHP e percebi que muitos desenvolvedores têm dúvidas a respeito de comandos SQL, não sabem ou não utilizam de forma correta os outer joins.
Por isso, decidi fazer um post sobre esse assunto explicando como utilizar o left outer join, right outer join, natural join, cross join ou inner join (mais utilizado).
Para que servem os outer joins?
Servem para fazer as junções entre duas ou mais tabelas, cruzando informações, combinando registros, testando desigualdades.
Por que cruzar dados?
Quando pensamos em armazenamento de dados, não podemos sair criando tabelas sem uma avaliação e sem a criação de um modelo ER (Entidade Relacionamento), e uma das vantagens de pensar no modelo é evitar a repetição de dados. E como fazer isso? Distribuindo-os em mais de uma tabela de forma que possamos categorizar as repetições.
Se você olhar o modelo abaixo, existe uma tabela de programadores e uma de empresas, note que as duas estão relacionadas. Guardo na tabela programadores somente um código que identifica a empresa em que o programador trabalha. Fiz isso em virtude da possibilidade de ter vários programadores relacionados a mesma empresa, assim evito ter que escrever várias vezes o nome da empresa (texto ocupa mais espaço que número) e evito que a mesma empresa seja escrita de maneiras diferentes, dificultando assim, por exemplo, uma busca. Porém, agora para recuperar esses dados será necessário utilizar junções.

![]() |
![]() |
![]() |
![]() |
Cruzando Dados
1 – Produto Cartesiano
Esse não é bem um tipo de junção, é conhecido como conexão cruzada, ou seja, resulta no cruzamento de cada linha de uma tabela com todas as linhas de outra tabela.
SELECT p.nome, l.nome FROM programadores p CROSS JOIN linguagens l;

O resultado desta consulta gera 36 linhas de combinações. Obs.: Esse tipo de junção não é muito utilizado.
Para obter o mesmo resultado podemos utilizar outras duas sintaxes: retirar o CROSS JOIN e inserir uma vírgula (,) ou usar o INNER JOIN sem a condição de comparação (ON). O resultado será o mesmo.
SELECT p.nome, l.nome FROM programadores p, linguagens l;
SELECT p.nome, l.nome FROM programadores p INNER JOIN linguagens l;








9:12 em 22 de junho de 2009
Entendendo Outer Joins SQL – Parte 1 (Produto Cartesiano) | Profissionais TI…
Participo de algumas listas de discussão sobre PHP e percebi que muitos desenvolvedores têm dúvidas a respeito de comandos SQL, não sabem ou não utilizam de forma correta os outer joins……
9:17 em 22 de junho de 2009
Paulinha,
Seja bem-vinda e parabéns pelo conteúdo, muito interessante.
Abraço
12:05 em 22 de junho de 2009
Jackson,
Obrigada. Espero poder contribuir com mais conteúdos.
Abraços
12:08 em 22 de junho de 2009
Belo post! Sempre é bom saber mais sobre SQL…
Parabéns.
12:16 em 22 de junho de 2009
Oi Klaus!!!
Obrigada. Em breve falarei mais sobre o assunto.
Abraços
18:19 em 22 de junho de 2009
Parabéns pelo post. Trabalho com desenvolvimento PHP utilizando o framework Cake. Muitas vezes acabamos não prestando a devida atenção nesses detalhes de banco que interferem diretamente no desempenho da aplicação.
Parabéns!
19:05 em 22 de junho de 2009
Oi Pinter…
Obrigada!!!
É verdade, é que uma vez que você passa usar Frameworks acaba na maioria das vezes não precisando gerar consultas na mão.
Abraços
7:07 em 23 de junho de 2009
[...] conexão interna inicialmente faz a mesma coisa que a conexão cruzada, porém aplica restrições que podem ser de igualdade ou desigualdade, isso faz com que algumas [...]
7:02 em 24 de junho de 2009
[...] Obs.: O modelo de dados utilizado neste post encontra-se em Entendendo Outer Joins SQL – Parte 1 (Produto Cartesiano) [...]
10:13 em 6 de julho de 2009
[...] Entendendo Outer Joins SQL – Parte 1 (Produto Cartesiano) [...]
17:24 em 29 de abril de 2010
Gostaria de saber como o produto cartesiano pode ajudar a tabela verdade.
19:00 em 29 de abril de 2010
Boa tarde Celso,
Eu não sei se entendi muito bem a sua pergunta, pode me explicar melhor sua dúvida?
É que o produto cartesiano simplesmente é uma forma de relacionar todos os dados entre duas tabelas para obter a relação entre elas.
Também recomendo que você de uma lida na continuação desse post em: http://www.profissionaisti.com.br/author/paulinha/
Até mais.
Paulinha