Em um primeiro momento, fiz sem subconsulta e me retornou somente 3 valores. Qual o motivo disso?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Em um primeiro momento, fiz sem subconsulta e me retornou somente 3 valores. Qual o motivo disso?
Ei, William! Tudo bem?
Isso pode aconter quando começamos a misturar LEFT JOIN com filtros na cláusula WHERE.
Na lógica usada no comando:
WHERE strftime('%m', p.datahorapedido) = '10' IS NULL
O SQLite avalia essa expressão da seguinte forma:
Primeiro, ele tenta extrair o mês da data com strftime('%m', p.datahorapedido).
Depois, ele compara se esse resultado é igual a '10' (retornando 1 para verdadeiro, 0 para falso, ou NULL se o pedido não existir devido ao LEFT JOIN).
Por fim, você checa se essa comparação inteira IS NULL.
Como o LEFT JOIN traz todos os clientes (inclusive os que não têm nenhum pedido), os clientes que não compraram nada geram campos p.datahorapedido vazios. Para esses casos, o strftime resulta em NULL, e a comparação NULL = '10' também é NULL. Como você filtrou por IS NULL, o banco trouxe exatamente esses clientes que nunca fizeram nenhuma compra. Os clientes que compraram em outros meses foram descartados pela lógica.
A solução que você viu na aula usa a subconsulta justamente para contornar isso. A subconsulta filtra os pedidos de outubro primeiro, e depois o LEFT JOIN combina com os clientes. Assim, quando você coloca WHERE x.idcliente IS NULL, você consegue identificar os clientes que não aparecem nessa lista de pedidos de outubro.
Espero ter ajudado. Qualquer dúvida, compartilhe conosco.
Bons estudos e até mais!