Pra que serve INNER JOIN?

Qual a vantagem de eu fazer uma query assim:

select distinct p.descricao, e.nome from projeto p inner join empregado e inner join proj_emp pe on p.cod_p = pe.cod_p on e.cod_e = pe.cod_e and pe.data > '01/01/2002'

se eu posso fazer assim:

select distinct p.descricao, e.nome from projeto p, empregado e, proj_emp pe where p.cod_p = pe.cod_p and e.cod_e = pe.cod_e and pe.data > '01/01/2002'

Ou seja, qual a vantagem do INNER JOIN??

Pelo que eu sei, o INNER JOIN é bastante utilizado para evitar que condições importantes sejam esquecidas.

É aconselhável utilizar a cláusula INNER JOIN.

como assim?

Vantagem nenhuma, o otimizador do Oracle por ex interpreta as duas consultas de maneira igual.

E vc pode fazer Left e Right Join na clausula Where utilizando (+)

É igual

Não tenho certeza, mas já ouvi dizer que no SQL SERVER consultas com ‘INNER JOIN’ tem melhor desempenho.

Na empresa em que eu trabalhava até o ano passado só se usava INNER JOIN para todo tipo de consulta.

Hmm… até agora nada… :smiley:
Talvez quanto ao desempenho possa ter alguma diferença. Mas por enqto é uma suposição. Alguém mais tem algo a dizer?? :grin:

Opa,

Esta questão de desempenho só é notada se o SGBD não tiver o analisador lexico, que otimiza as consultas, hoje a grande maioria já dispõem disso aí.

Bem pelo plano cartesiano, como é chamado a associação que não tem inner join é feito a seleção da seguinte forma:

suponha que temos a tabela cliente e pedido.

cliente
0001 Zé das coves
0002 Zé da esquina

pedido
Cliente Ordem de compra
00001 97778
00003 08776

Pronto… neste caso seria feito o resultado seria 8 as verificações de relacionamento, ou seja, cliente.id= pedido.cliente testado para cada um dos registro 2 vezes.

Já com o inner join é testado apenas 4 vezes onde o teste seria apenas um para dada registro.

Assim fica muito difícil, e nem sei se dá para entender, é bom e explicar isto rabiscando cada intereção.
:okok:

Nao fica difícil… estudei algebra relacional bimestre passado, e vi isso q vc descreveu. Mas se o SGBD otimizar as consultas, entao INNER JOIN fica obsoleto? Isso se aplica pro OUTER JOIN tb?

[quote]Pelo que eu sei, o INNER JOIN é bastante utilizado para evitar que condições importantes sejam esquecidas.

É aconselhável utilizar a cláusula INNER JOIN.[/quote]

isto é um bom motivo para você continuar usando inner join além da consulta ficar mais refinada visualmente.

:okok:

Hmm, vc acha? nao sei… por enqto eu acho q fica estranho. Ma vá… Isso é opinião… vlw… :grin: