Las cláusulas WHERE pueden llegar a ser muy complejas si se combinan varios operadores AND y OR.

SELECT
   PRD_CODIGO,
   PRD_NOMBRE,
   PRD_PRECTO,
   PRD_PREVTA
FROM
   PRODUCTOS
WHERE
   PRD_PRECTO > 1000 AND (
   PRD_PREVTA >= 50000 OR
   EXTRACT(YEAR FROM PRD_FECHAX) = 2012)

Cuando se trata de una condición compleja lo más recomendable es siempre usar paréntesis para asegurarse que el orden de evaluación sea el deseado.

Por ejemplo, en este caso:

Condición1 AND Condición2 OR Condición3

¿cómo lo evalúa el Firebird, como:
(Condición1 AND Condición2) OR Condición3
o como:
Condición1 AND (Condición2 OR Condición3)
?

Para evitar confusiones y errores difíciles de detectar es mejor usar siempre paréntesis.

Anuncios