Diferença entre JOIN e WHERE

Nessecito realizar um select utilizando join entre duas tabelas. Procurei e os textos que encontrei sao claros, porem, fiquei com a impressao de que um join é o mesmo que utilizar filtros usando where. Alguem pode me dizer se estou engando?

Valeu

o JOIN na verdade é mais flexível que o WHERE para filtrar dados em diferentes tabelas do banco e sua sintaxe também é mais clara do que juntar vários AND’s no WHERE.

Assim você só usa o WHERE para realmente filtrar os resultados por um critério qualquer e usa os JOIN’s para cuidar dos relacionamentos entre tabelas.

Sim…

Inner Join
Outter Join

aparentemente são a mesma porcaria que WHERE.

Eu costumo usar WHERE até porque 12 anos de Oracle não é fácil.

Bem não sei se estou 100% correto, pq não sou nenhum expert. Pode até ter diferenças de performance, etc… mas é a mesma coisa sim.

Abraços

12 anos de oracle e nunca vi e nunca utilizei Join nas empresas que passei.

vi muito Join em bases SQL Server…

Acho que o oracle (versões antigas tinha até problemas com outer join).

Bem sempre usei WHERE e nunca tive problemas e o codigo parece que mais legivel.

Minha humilde opinião.

Abraços

Pelo que me consta…

select * from tabela_1, tabela_2
where tabela_1.id = tabela_2.id

//é igual a

select * from tabela_1
inner join tabela_2 on tabela_1.id = tabela_2.id

eu prefiro escrever com join pois fica mais claro. Mas isso depende de vc… a performance dependendo do conjunto de tabelas que se usa é bastante afetada na primeira forma. Pois se pensarmos bem, se não fosse necessário usar a sintaxe inner join, não a teriam criado, mas isso é um pensamento rígido… faça testes e use o que te der mais performance.

[]s

O join entre tabelas é igual ao where quando você quer buscar dados das duas tabelas (INNER JOIN).

Exemplo de INNER JOIN:

SELECT a.*, b.* FROM tabela1 a INNER JOIN tabela2 b ON ( a.id = b.id );

A cláusula where já não satisfaz quando você quer buscar resultados de apenas uma das tabelas (LEFT JOIN e RIGHT JOIN).
Como o próprio nome diz, LEFT JOIN busca dados da tabela da esquerda mesmo que na tabela da direita não existam dados correspondentes. E RIGHT JOIN é o inverso.

Exemplo de LEFT JOIN:

SELECT a.* FROM tabela1 a LEFT JOIN tabela2 b ON ( a.id = b.id );

Exemplo de RIGHT JOIN:

SELECT b.* FROM tabela1 a RIGHT JOIN tabela2 b ON ( a.id = b.id );

Há outras variantes como LEFT OUTER JOIN e afins, mas fogem do meu conhecimento. Fica aberto para completarem (e corrigirem, se necessário) o post.

Deve ter algumas vantagens na performance de consultas com grande volume de dados.
A maneira como o JOIN usa os índices para comparação deve ser diferente.

[quote=wandersonxs]Sim…

Inner Join
Outter Join

aparentemente são a mesma porcaria que WHERE.

Eu costumo usar WHERE até porque 12 anos de Oracle não é fácil.

Bem não sei se estou 100% correto, pq não sou nenhum expert. Pode até ter diferenças de performance, etc… mas é a mesma coisa sim. [/quote]

Se não me engano é o seguinte:

O Oracle resolve as questões de relacionamento de forma “automática”, ou seja, a partir da cláusula where ele monta os joins pra vc. Até a versão 10, me parece que havia como configurar o banco para ele trabalhar de 2 modos, por estatistica ou por regra; se fosse por regra o desenvolvedor deveria tomar mais cuidadeo e definir melhor a ordem de acesso dos indices através do where, mesmo assim, a questão dos joins fica implicita.

Os Joins (o código escrito) está previsto na definição no padrão ANSI se não me engano, significa que a grande maioria (senão todos) dos bancos devem conseguir interpretar esta declaração de forma correta, inclusive o Oracle. Normalmente os profissionais que trabalham com Oracle não utilizam o JOIN porque o interpretador fornece essa regalia (porisso que muitos só funcionam utilizando JOIN - por causa do padrão ANSI a ser seguido), que aliás eu gosto, parece que o código fica um pouco mais limpo mesmo. O problema é que fica fora do padrão ANSI, ou seja, se vc for trabalhar com outro tipo de banco provavelmente terá que se acostumar com o uso do JOIN. Por outro lado se souber utilizar o tal do JOIN vc trabalha com QUALQUER banco de dados relacional com condições mínimas exigidas pelos padrões definidos.

flws

flws

[quote=fantomas][quote=wandersonxs]Sim…

Inner Join
Outter Join

aparentemente são a mesma porcaria que WHERE.

Eu costumo usar WHERE até porque 12 anos de Oracle não é fácil.

Bem não sei se estou 100% correto, pq não sou nenhum expert. Pode até ter diferenças de performance, etc… mas é a mesma coisa sim. [/quote]

Se não me engano é o seguinte:

O Oracle resolve as questões de relacionamento de forma “automática”, ou seja, a partir da cláusula where ele monta os joins pra vc. Até a versão 10, me parece que havia como configurar o banco para ele trabalhar de 2 modos, por estatistica ou por regra; se fosse por regra o desenvolvedor deveria tomar mais cuidadeo e definir melhor a ordem de acesso dos indices através do where, mesmo assim, a questão dos joins fica implicita.

Os Joins (o código escrito) está previsto na definição no padrão ANSI se não me engano, significa que a grande maioria (senão todos) dos bancos devem conseguir interpretar esta declaração de forma correta, inclusive o Oracle. Normalmente os profissionais que trabalham com Oracle não utilizam o JOIN porque o interpretador fornece essa regalia (porisso que muitos só funcionam utilizando JOIN - por causa do padrão ANSI a ser seguido), que aliás eu gosto, parece que o código fica um pouco mais limpo mesmo. O problema é que fica fora do padrão ANSI, ou seja, se vc for trabalhar com outro tipo de banco provavelmente terá que se acostumar com o uso do JOIN. Por outro lado se souber utilizar o tal do JOIN vc trabalha com QUALQUER banco de dados relacional com condições mínimas exigidas pelos padrões definidos.

flws

flws
[/quote]
Como trabalhei(90%) da minha vida profissional com oracle, usei sempre WHERE.
Eu até conheço JOIN e usei em alguns projetos SQL Server …
legal a informação, não sabia que isto era regalia do Oracle. :smiley:

PS: Não falem mal do Oracle, senão eles fuzilam o Java… kkkk :stuck_out_tongue:

Abraços
Wanderson 8)