[firebase-br] Join ou Where ??

Valdir Marcos valdir.marcos em ig.com.br
Ter Out 18 16:38:07 -03 2005


A padronização SQL-89 utilizava WHERE para relacionar tabelas, já na 
padronização SQL-92, convencionou-se utilizar o JOIN, pela clareza nos 
relacionamentos e facilidade de entendimento de novos recursos importantes, 
como left, right e full join, deixando para o where apenas os filtros dos 
dados.
Desde a implementação do SQL-92 no FB, existe uma itenção dos mantenedores 
dos fontes do FB de não aceitar a maneira antiga (where) de relacionar as 
tabelas.
Com a recente implementação do SQL-99 no FB, muitas novas mudanças virão no 
FB 2.0 e 3.0, logo quanto antes vc aprender usa JOIN para relacionamentos e 
WHERE para filtros, mais fácil ficará entender os novos recurso.
Além dessa padrinização, o otimizador do FB foi redesenhado para 
"interprestar" os JOINs na hora de escolher os melhores indíces para as 
pesquisas.
Existem, inclusive, alertas na lista do Firebird-Support sobre a 
possibilidade de resultados indesejados ao se misturar os relacionamentos 
WHERE e JOIN em um mesmo select.
Além disso, se vc ler o The Firebird Book, da Helen Borrie, nos capítulos 
18 - Indexes e 22-Querying Multiple Tables vc verá vários detalhes do porquê 
é melhor JOIN.

Veja as mensagens abaixo:
http://groups.yahoo.com/group/firebird-support/message/1433
http://lists.sonic.net/pipermail/webhub-list/2005-March/000220.html
http://www.elists.org/pipermail/delphi-db/2003-January/006622.html

Um abraço,

Valdir Marcos



----- Original Message ----- 
From: "Denis Rocha" <denisrocha em hotmail.com>
To: <lista em firebase.com.br>
Sent: Tuesday, October 18, 2005 2:27 PM
Subject: [firebase-br] Join ou Where ??


> Oi Pessoal,
>
> Sempre tive uma dúvida. Qual a diferença de usar Join ou Where ? Existe o 
> caso do lef join e rigth join, mas tirando essas duas particularidades, 
> qual a vantagem ?
> Por exemplo. Se eu tiver uma tabela clientes e uma tabela Ceps.
>
> Se eu fizer :
>
> select clientes.*,ceps.*  from clientes,ceps where clientes.cep = ceps.cep
>
> ou
>
> select clientes.*,ceps.* from clientes inner join ceps on ( ceps.cep = 
> clientes.ceps )
>
> Ambas vão ter o mesmo resultado. Pelo que testei a performance tbm a 
> mesma. Existe alguma recomentação para usar uma ou outra forma ?  O não 
> existe nenhuma padronização.
>
>
> Grato a todos,
> Denis
>
>
>
>


--------------------------------------------------------------------------------


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 





Mais detalhes sobre a lista de discussão lista