Operadores de comparación y lógicos: construir condiciones precisas

Una condición es una expresión cuyo resultado decide si una fila cumple una regla. Puede ser sintácticamente válida y aun así seleccionar filas distintas a las que imaginamos. Los operadores de comparación evalúan valores; AND, OR y NOT permiten combinar o negar esas evaluaciones.

La claridad importa especialmente cuando una condición mezcla varias reglas de negocio.

Operadores principales

Igualdad y diferencia

= comprueba si dos expresiones son iguales. <> comprueba si son distintas; SQL Server también admite !=, aunque <> es la forma estándar de SQL.

Expresion = Valor
Expresion <> Valor

Orden y límites

> y < comparan si un valor es mayor o menor que otro. >= y <= incluyen también el valor utilizado como límite.

Expresion > Limite
Expresion >= Limite
Expresion < Limite
Expresion <= Limite

AND: exigir todas las condiciones

AND devuelve verdadero únicamente cuando todas las condiciones conectadas son verdaderas.

Condicion1 AND Condicion2

OR: aceptar cualquiera de las condiciones

OR devuelve verdadero cuando al menos una de las condiciones es verdadera. Al combinarlo con AND, los paréntesis permiten mostrar qué condiciones forman una sola regla.

Condicion1 OR Condicion2

NOT: negar una condición

NOT invierte una condición verdadera o falsa. Cuando interviene NULL, el resultado también puede ser desconocido y requiere revisar la lógica completa.

NOT (Condicion)

Ejemplo: combinar requisitos

Queremos productos activos con existencia y precio de hasta 800 pesos:

SELECT
    p.IdProducto,
    p.Nombre,
    p.Precio,
    p.Existencia
FROM dbo.Producto AS p
WHERE p.Activo = 1
  AND p.Existencia > 0
  AND p.Precio <= 800
ORDER BY p.Precio;

Cada fila debe cumplir las tres expresiones porque están unidas mediante AND.

Agrupar condiciones con paréntesis

AND se evalúa antes que OR. Esta prioridad se llama precedencia de operadores. Si queremos productos activos que pertenezcan a una de dos categorías, hacemos explícita la agrupación:

SELECT
    p.IdProducto,
    p.Nombre,
    p.IdCategoria,
    p.Activo
FROM dbo.Producto AS p
WHERE p.Activo = 1
  AND
  (
      p.IdCategoria = 1
      OR p.IdCategoria = 2
  );

Sin los paréntesis, la segunda categoría podría aceptarse aunque el producto no estuviera activo. Es preferible expresar visualmente la intención en lugar de depender únicamente de la precedencia implícita.

Utilizar NOT

SELECT
    p.IdPedido,
    p.Estado
FROM dbo.Pedido AS p
WHERE NOT (p.Estado = 'Cancelado');

En este caso, p.Estado <> 'Cancelado' sería más directo. NOT resulta útil para negar condiciones compuestas, EXISTS, IN, BETWEEN o LIKE, siempre que la forma final siga siendo fácil de leer.

Las comparaciones con NULL

Una comparación como Correo = NULL no devuelve verdadero. Para comprobar ausencia utilizamos:

WHERE Correo IS NULL;

Y para exigir un valor existente:

WHERE Correo IS NOT NULL;

NULL representa un valor ausente o desconocido. Por eso la lógica con nulos admite un resultado desconocido, además de verdadero y falso. Esa tercera posibilidad puede cambiar el efecto de una negación o de una expresión compuesta.

Qué conviene comprobar

Revisamos los límites exactos: > no incluye el valor comparado, mientras que >= sí. También comprobamos tipos y conversiones implícitas, las que SQL Server aplica sin que la consulta las solicite expresamente, especialmente entre números, fechas y textos.

Cuando una condición combina AND y OR, los paréntesis deberían hacer evidente la regla incluso antes de ejecutar la consulta. Una pequeña tabla de casos también puede confirmar qué combinaciones esperamos aceptar.

Relacionado con