Envez de escrever WHEN PRECO_DE_LISTA >= 7 AND PRECO_DE_LISTA < 12 THEN 'PRODUTO EM CONTA' . Eu poderia utilizar o between para pegar os valores que estariam entre o 12 e o 7 ?
Envez de escrever WHEN PRECO_DE_LISTA >= 7 AND PRECO_DE_LISTA < 12 THEN 'PRODUTO EM CONTA' . Eu poderia utilizar o between para pegar os valores que estariam entre o 12 e o 7 ?
Oi, João! Tudo bem?
Desde já, peço desculpas pela demora em retornar.
A resposta para sua pergunta é: depende!
Dependendo das sentenças usadas no CASE
e da forma com que elas foram organizadas, é possível sim utilizar o BETWEEN
. No entanto, vale ressaltar que ele também inclui os seus extremos (como o 12 e o 7), e nem sempre queremos que estes valores façam parte da condição.
Para uma melhor compreensão, observe o CASE
criado em aula:
(CASE
WHEN PRECO_DE_LISTA >= 12 THEN 'PRODUTO CARO'
WHEN PRECO_DE_LISTA >= 7 AND PRECO_DE_LISTA < 12 THEN 'PRODUTO EM CONTA'
ELSE 'PRODUTO BARATO'
END)
Note que, para o produto ser considerado "em conta", ele deve ser maior ou igual a 7 e inferior a 12. Veja agora o mesmo código só que com o BETWEEN
:
(CASE
WHEN PRECO_DE_LISTA >= 12 THEN 'PRODUTO CARO'
WHEN PRECO_DE_LISTA BETWEEN 7 AND 12 THEN 'PRODUTO EM CONTA'
ELSE 'PRODUTO BARATO'
END)
Ao usar o BETWEEN
, no entanto, perdemos tal comparação, haja vista que os valores considerados "em conta" serão não apenas os valores entre 7 e 12, mas também os próprios 7 e 12.
De maneira geral, o BETWEEN
faz a seguinte análise:
preco_de_lista >= 7
preco_de_lista <= 12
Se as duas comparações forem verdadeiras, então a condição global também é verdadeira, o que pode gerar um conflito em nossa consulta, uma vez que já existe uma análise de igualdade em preco_de_lista >= 12
.
Neste cenário em específico, caso o BETWEEN
esteja no segundo WHEN
, a comparação que verifica se preco_de_lista
é igual a 12 permanece apenas no primeiro WHEN
. Por outro lado, com o CASE
abaixo a situação é diferente:
(CASE
WHEN PRECO_DE_LISTA BETWEEN 7 AND 12 THEN 'PRODUTO EM CONTA'
WHEN PRECO_DE_LISTA >= 12 THEN 'PRODUTO CARO'
ELSE 'PRODUTO BARATO'
END)
A partir dele, temos o primeiro WHEN
com a cláusula BETWEEN
. Os produtos com o valor igual a 12 serão registrados como "em conta", descartando a comparação preco_de_lista >= 12
, presente agora no segundo WHEN
.
Com essa modificação, foram perdidos alguns dados importantes, não é mesmo? Alguns produtos antes considerados "caros" agora são tidos como "em conta"!
Sendo assim, pode utilizar o BETWEEN
para simplificar o código que verifica os produtos que estão em conta. Contudo, é importante analisar se não existem informações sendo perdidas neste processo!
João, espero ter ajudado. Se surgir alguma dúvida após a minha explicação ou durante os seus estudos, fico à disposição.
Um forte abraço!