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

A maneira baixo estaria incorreta?

SELECT compradores.nome, SUM(valores) from COMPRAS INNER JOIN compradores ON compra.id_compradores = compradores.id_compradores WHERE compra.id_compradores = compradores.id_compradores GROUP BY compradores.nome ORDER BY compradores.nome;

Achei estranha a solução por que não faz o uso da cláusula WHERE.

4 respostas

Boa tarde Alan,

Não entendi muito bem a dúvida, a cláusula WHERE está ali. Será que você postou a query errada?

Oi Alan,

A dúvida é sobre o where mesmo ou sobre o having? Pois o where realmente está na query.

solução!

Olá Alan, imagino que a confusão ocorreu por conta de haver as mesmas condições( compra.id_compradores = compradores.id_compradores) no INNER JOIN e no WHERE.

Neste caso, não seria necessário o WHERE pois o INNER JOIN também é um filtro, ou seja, o filtro já esta sendo realizado anteriormente no INNER JOIN. Só seria necessário caso tivéssemos que colocar outro tipo, outra condição, porém, caso você quisesse colocar esta nova condição no INNER JOIN com um 'AND' também poderia, sem problemas.

Um cenário que você pode vim a se preocupar, é quando o JOIN for do tipo LEFT ou RIGHT, neste cenário o WHERE pode trazer resultados indesejados dependendo dos resultados do LEFT JOIN ou RIGHT JOIN.

Uma dica, caso você queira, não é necessário o uso da palavra 'INNER', basta utilizar 'JOIN'.

Espero ter ajudado,

abraços.

Boa tarde à todos, acho que não ficou muito clara a dúvida da maneira que me expressei. Na parte de cima coloquei como escreveria a querie para entender se também estaria correta. Mas a dúvida em relação a questão mesmo foi por não ter visto na resolução a clausula WHERE, que até então não tinha visto sem. A explicação do Alef Ferreira deixou bem claro o porque. Agradeço à todos a atenção!