Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

LEFT JOIN - Erro no código/interpretação

Olá,

Houve um erro no que foi dito pelo professor durante a explicação do LEFT JOIN. Ao aplicar uma data para visualizar os clientes que não compraram em determinado ano, não retornou nada e o professor concluiu que todos os clientes compraram naquele ano. No exemplo anterior vimos que o 'Fábio Carvalho' nunca havia feito uma compra, o que torna impossível ele ter comprado naquele ano específico.

O código passado pelo professor foi:

SELECT DISTINCT A.CPF, A.NOME, B.CPF FROM tabela_de_clientes A
LEFT JOIN notas_fiscais B ON A.CPF = B.CPF
WHERE B.CPF IS NULL AND YEAR(B.DATA_VENDA) = 2015;

No entanto, pela minha compreensão, esse código realiza a busca dos que nunca compraram, portanto não estão na tabela de notas fiscais (B.CPF IS NULL), e que o ano da venda seja 2015, ou seja, duas informações incompatíveis, que se anulam. Por conta disso o 'Fábio Carvalho' não retornou, pois ele não satisfaz as duas condições.

Para realizar essa busca através desse código, basta remover 'B.CPF IS NULL AND' e acrescentar 'IS NULL' após o ano, estou correto?

2 respostas
solução!

Olá,

Não tenho familiaridade com os dados do treinamento, então vou tentar responder apenas pelas informações que forneceu.

Me parece que o único caso que CPF IS NULL são os que não foi feita nenhuma venda, ou seja, nesse caso DATA_VENDA também seria NULL, logo seu primeiro argumento está correto: é impossível CPF IS NULL AND YEAR(DATA_VENDA) = 2015.

Se você quiser todos clientes que já fizeram compras, porém não em 2015, seu WHERE deveria ser CPF IS NOT NULL AND YEAR(DATA_VENDA) <> 2015. Nesse caso ele retornaria vendas realizadas (CPF IS NOT NULL), porém não em 2015 ( YEAR(DATA_VENDA) <> 2015).

Abs

Olá, Bruno!

Na realidade, ele buscava os clientes que não compraram naquele ano, independente de já terem comprado ou não. De qualquer forma, só queria ver se a minha lógica estava correta. Consegui pensar em caminhos para realizar essa busca. Obrigado!

Abraço!