1
resposta

Dúvidas de junção de querys no inner join

Olá,

Nos vídeos o professor criou essa query, com junção de outra query no inner join:

SELECT 
TC.CPF, TC.NOME, TC.VOLUME_DE_COMPRA, TV.MES_ANO, TV.QUANTIDADE_TOTAL, 
(CASE WHEN TC.VOLUME_DE_COMPRA >= TV.QUANTIDADE_TOTAL THEN 'VENDAS VÁLIDAS' 
ELSE 'VENDAS INVÁLIDAS' END) AS RESULTADO 
FROM TABELA_DE_CLIENTES TC 
INNER JOIN (
    SELECT NF.CPF, 
    CONVERT(VARCHAR(7), NF.DATA_VENDA, 120) AS MES_ANO, 
    SUM(INF.QUANTIDADE) AS QUANTIDADE_TOTAL 
    FROM NOTAS_FISCAIS NF 
    INNER JOIN ITENS_NOTAS_FISCAIS INF 
    ON NF.NUMERO = INF.NUMERO 
    GROUP BY NF.CPF, CONVERT(VARCHAR(7), NF.DATA_VENDA, 120)
) TV
ON TV.CPF = TC.CPF 
WHERE TV.MES_ANO = '2015-01'; 

Fiz alguns testes e criei a mesma consulta apenas fazendo inner join pela tabelas sem usar o inner join em outra consulta, como feito abaixo:

    SELECT NF.CPF, TC.NOME, TC.VOLUME_DE_COMPRA,
    CONVERT(VARCHAR(7),NF.DATA_VENDA,120) AS MES_ANO,
    SUM(INF.QUANTIDADE) AS QUANTIDADE_TOTAL,
    CASE WHEN TC.VOLUME_DE_COMPRA >= SUM(INF.QUANTIDADE)
    THEN 'VENDAS VALIDAS'
    ELSE 'VENDAS INVALIDA'
    END
    FROM NOTAS_FISCAIS NF
    INNER JOIN ITENS_NOTAS_FISCAIS INF
    ON NF.NUMERO = INF.NUMERO
    INNER JOIN TABELA_DE_CLIENTES TC
    ON NF.CPF = TC.CPF
    GROUP BY NF.CPF, CONVERT(VARCHAR(7),NF.DATA_VENDA,120), TC.VOLUME_DE_COMPRA, TC.NOME

Minha dúvida é a seguinte, na junção de querys ela é viável? Tem alguns casos que é realmente é necessário juntar as querys para solucionar o problema, que não existira outra forma para solucionar?

Agradeço a ajuda, porque vejo que a junção de querys acaba as vezes tendo mais complexidade para a criação, gostaria de saber se é bem usado no dia a dia, para focar mais alguns treinos com ela ou se busco treinar a solução de uma forma mais simples se ela não ser realmente necessária.

1 resposta

Quando estou realizando minhas consultas, prefiro utilizar tabelas intermediarias já filtradas para ganhar desempenho no join.