Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Qual a diferença de usar o INNER JOIN ou não

No exemplo mostrado pelo professor, fiz o exemplo que ele mostrou e um outro diferente, sem usar o INNER JOIN.

Segue abaixo as duas situações

SELECT nf.matricula, v.nome, COUNT(*) AS NUMERO_DE_NOTAS
FROM notas_fiscais nf
INNER JOIN tabela_de_vendedores v
ON nf.matricula = v.matricula
GROUP BY nf.matricula, v.nome
ORDER BY nf.matricula ASC;
SELECT nf.matricula, v.nome, COUNT(*) AS NUMERO_DE_NOTAS
FROM notas_fiscais nf, tabela_de_vendedores v
WHERE nf.matricula = v.matricula
GROUP BY nf.matricula, v.nome
ORDER BY nf.matricula ASC;

Qual a diferença no dia-a-dia, de se usar um dos exemplos acima para juntar duas tabelas?

2 respostas
solução!

Lucas,

Essa é uma pergunta que gera muito debate e discussão. Tem muitas variáveis envolvidas.

Eu creio que em bancos de dados que contêm milhares de registros, o "INNER JOIN" tem um processamento mais rápido que a cláusula "WHERE". Mas em poucos registros a diferença é desprezível e não é possível perceber. Existem pessoas que dizem que a performance é a mesma, mas acredito que também depende muito da estrutura do banco e dados quando foi criado e outros fatores como de qual fabricante é o Banco de Dados (Oracle, Microsoft).

Para você ter uma ideia da briga, por favor, veja os comentários nos links abaixo:

===============================================================

Qual a diferença entre usar inner join ou por relacionamentos no where

A notação inner join foi introduzida na versão SQL92 do padrão ANSI SQL. Todos os principais bancos de dados adotam a sintaxe de junção do SQL92. Como a maioria dos servidores já estavam no mercado antes do novo padrão, eles também incluem a forma de junção antiga where, porém é preferível usar o novo padrão pelos seguintes motivos:

  • Condições de junção e condições de filtro são separadas em duas clausulas diferentes (a subcláusula on e a cláusula where, respectivamente), tornando a consulta mais fácil de entender e manter.
  • As condições de junção para cada par de tabelas estão contidas em suas próprias cláusulas on, tornando menos provável que parte de uma junção seja omitida por engano.
  • Consultas que usam a sintaxe de junção SQL92 são portáveis entre servidores de banco de dados, ao passo que a sintaxe antiga where é ligeiramente diferente entre os diferentes servidores.

https://pt.stackoverflow.com/questions/44914/qual-a-diferen%C3%A7a-entre-usar-inner-join-ou-por-relacionamentos-no-where

===============================================================

Qual a diferença entre unir tabelas por JOIN e WHERE?

Não há diferença, algebricamente as consultas são idênticas e terão a mesma performance.

Pessoalmente eu prefiro usar o padrão ANSI 92, por algumas razões:

  • Mais legível, com os critérios de união separadas da cláusula WHERE, pois não se sabe a primeira vista se condições na clásula WHERE são filtros ou junções.
  • Menos provável que perca critérios de união, na primeira consulta se não especificarmos o critério na cláusula WHERE o resultado será o produto cartesiano entre as tabelas clientes,enderecos
  • Evolução, se o padrão ANSI 92 especifica operadores de junções específicas, por que não usá-los?
  • Flexibilidade, uma junção na cláusula WHERE que tenha um efeito de INNER JOIN e posteriormente precise ser alterado para OUTER pode ser bem mais complicado

https://pt.stackoverflow.com/questions/15025/qual-a-diferen%C3%A7a-entre-unir-tabelas-por-join-e-where

===============================================================

Qual a diferença entre usar inner join ou por relacionamentos no where

Em questão de resultados, não terá diferenças. Sobre desempenho, a condição de junção INNER tem um ganho discreto comparado com o WHERE, pelo fato de ser interpretado antes.

Ordem de interpretação: 1 - FROM; 2 - ON; 3 - INNER; 4 - WHERE; 5 - SELECT;

https://pt.stackoverflow.com/questions/44914/qual-a-diferen%C3%A7a-entre-usar-inner-join-ou-por-relacionamentos-no-where

===============================================================

[]'s,

Fabio I.

Entendi.

Obrigado Fábio.