1
resposta

[Dúvida] Qual a Ordem de execução das Funções ( em especial INNER JOIN)

SELECT 
YEAR(DATA_VENDA), SUM(QUANTIDADE * PRECO) AS FATURAMENTO 
FROM notas_fiscais A
INNER JOIN itens_notas_fiscais B
ON A.NUMERO = B.NUMERO
GROUP BY YEAR(DATA_VENDA);

Bom, lendo o codigo eu primeiro digo que quero:

ESCOLHER o ANO da DATA_VENDA e a SOMA da (QUANTIDADE multiplicado pelo PRECO) COMO FATURAMENTO A PARTIR DA tabela notas_fiscais A..,

Teoricamente nesse ponto não deveria existir um erro? não existe esses dados na tabela A, ele já fez o INNER join?

1 resposta

Oi, Priscila, tudo bem?

Desculpe a demora em te responder!

A ordem de execução das operações em uma consulta SQL não é a mesma que a ordem em que escrevemos a consulta. Dessa forma, a ordem em que os comandos são interpretados é a seguinte:

  • FROM / JOIN: a tabela é produzida com o uso de JOINs.
  • WHERE: as linhas que não satisfazem a condição são descartadas.
  • GROUP BY: as linhas restantes são agrupadas com base nas colunas listadas.
  • AGGREGATE FUNCTIONS: as funções de agregação são aplicadas.
  • HAVING: as linhas que não satisfazem a condição são descartadas.
  • SELECT: as colunas finais são selecionadas.
  • ORDER BY: as linhas são ordenadas.
  • LIMIT / OFFSET: as linhas finais são selecionadas.

Então, no seu caso, a operação INNER JOIN é realizada antes do SELECT. Isso significa que, quando o SELECT é executado, ele está operando na tabela resultante do INNER JOIN, não apenas na tabela "notas_fiscais A". Portanto, não há erro no seu código, pois o INNER JOIN já foi realizado quando o SELECT é executado.

Espero ter ajudado. Caso tenha dúvidas, não hesite em postar no fórum!

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!