[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