Ir ao conteúdo
  • Cadastre-se

Filtro na cláusula WHERE ou INNER JOIN


Posts recomendados

Pessoal, me tirem uma dúvida...

 

Suponha-se a existência dessas duas tabelas:

CREATE TABLE cliente (id SERIAL PRIMARY KEY,nome CHARACTER VARYING(100));CREATE TABLE conta_receber (id SERIAL PRIMARY KEY,id_cli INTEGER REFERENCES cliente (id),qtd_parcela INTEGER,valor NUMERIC(11,2));INSERT INTO cliente (id, nome) VALUES (0, 'CONSUMIDOR');INSERT INTO cliente (id, nome) VALUES (1, 'FULANO');INSERT INTO cliente (id, nome) VALUES (2, 'BELTRANO');INSERT INTO conta_receber (id, id_cli, qtd_parcela, valor) VALUES (1, 0, 2, 100.00);INSERT INTO conta_receber (id, id_cli, qtd_parcela, valor) VALUES (2, 1, 1, 75.00);INSERT INTO conta_receber (id, id_cli, qtd_parcela, valor) VALUES (3, 1, 1, 64.25);INSERT INTO conta_receber (id, id_cli, qtd_parcela, valor) VALUES (4, 0, 3, 90.00);INSERT INTO conta_receber (id, id_cli, qtd_parcela, valor) VALUES (5, 1, 2, 77.80);

Agora vou fazer uma SELECT na tabela "conta_receber", mas não pode trazer os registros para o cliente = 0, então ficaria assim:

SELECT *FROM  conta_receberINNER JOIN  cliente ON cliente.id = conta_receber.id_cliWHERE  conta_receber.id_cli != 0

Se eu colocar o filtro no INNER JOIN, existe alguma diferença em questão de desempenho? Sei que os dois modos vão trazer o mesmo resultado, mas quero saber qual a melhor prática.

SELECT *FROM  conta_receberINNER JOIN  cliente ON cliente.id = conta_receber.id_cli AND conta_receber.id_cli != 0
Link para o comentário
Compartilhar em outros sites

Nao, já usei das duas formas, mas cada caso eu penso apenas na estética do código, 99% dos casos eu deixo o join apenas para os relacionamentos, e o where para as condições..

Quando estiver desenvolvendo dê uma parte de sua atenção para verificar a beleza de seu código. É uma coisa boba, mas fara a diferença quando precisar fazer manutenção depois.

Link para o comentário
Compartilhar em outros sites

99% dos casos eu deixo o join apenas para os relacionamentos, e o where para as condições..

 

Exatamente desse modo que venho praticando. É que em um teste eu vi que em ambas as maneiras o resultado era o mesmo, então a dúvida foi se teria alguma diferença em questão de desempenho.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...