1
resposta

[Dúvida] Uso de between

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 ?

1 resposta

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!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!