1
resposta

Duvida - Resultados divergem quando faço da forma no vídeo e quando adiciono um

Boa tarde, tudo bem?

Estou tendo um pouco de dificuldade de entender exatamente como que funcioa a questão das subconsultas. Entendi o que a professora fez ao completar a pesquisa utilizando o seguinte código

SELECT c.nome, x.id
FROM clientes c 
LEFT JOIN
(
    SELECT p.id, p.idcliente 
    FROM pedidos p 
    WHERE strftime('%m', p.datahorapedido) = '10')x
ON c.id = x.idcliente
WHERE x.idcliente IS NULL

porém tentei fazer somenten adicionando um novo filtro, sem realizar a subconsulta e a minha querry ficou da seguinte maneira

SELECT * from pedidos p
left join clientes c 
on p.idcliente = c.id
where strftime('%m',datahorapedido) = '10'
and p.idcliente is null 

o problema é que os resultados obtidos atra´ves das duas querrys são completamente diferentes porém eu não consigo entender o motivo, vocês poderiam explicar por favor?

1 resposta

Oii, Felipe! Tudo bem?

Claro, vamos lá! As duas consultas têm objetivos completamente distintos, apesar de ambas usarem LEFT JOIN e condições com IS NULL. Vamos comparar:

Tabela principal:

Na primeira consulta, a tabela principal é clientes. O foco é encontrar clientes que não têm pedidos em outubro. Na segunda consulta, a tabela principal é pedidos. O foco é encontrar pedidos de outubro que não têm clientes associados.

Uso da subconsulta:

A subconsulta na primeira consulta serve para filtrar os pedidos por mês antes de fazer a junção, permitindo identificar quais clientes estão ausentes desse conjunto. Na segunda consulta, não há subconsulta; o filtro de mês é aplicado diretamente na tabela pedidos, e a condição p.idcliente IS NULL busca algo totalmente diferente: pedidos órfãos (sem cliente).

Condição IS NULL:

Na primeira consulta, x.idcliente IS NULL verifica a ausência de correspondência na subconsulta, ou seja, clientes sem pedidos em outubro. Na segunda consulta, p.idcliente IS NULL verifica pedidos onde o campo idcliente já é NULL na tabela pedidos, ou seja, pedidos não vinculados a nenhum cliente.

Resumindo, a diferença está na lógica de filtragem; por isso, obtém resultados diferentes.

Espero ter ajudado, conte sempre conosco para sanar suas dúvidas.

Até mais, Felipe!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado!