Solucionado (ver solução)

Importante

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!

Solucionado
(ver solução)
1
resposta

[Dúvida] Sem subconsulta

Em um primeiro momento, fiz sem subconsulta e me retornou somente 3 valores. Qual o motivo disso?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
solução!

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!

Conteúdos para complementar seus estudos
Esse conteúdo pode estar em inglês, para traduzi-lo utilize o tradutor automático do navegador ou clique com o botão direito do mouse sobre a página e selecione a opção Traduzir para o português.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado