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

Una condición 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

Operador Significado
= Igual a
<> o != Distinto de
> y < Mayor que y menor que
>= y <= Mayor o igual y menor o igual
AND Todas las condiciones deben cumplirse
OR Al menos una condición debe cumplirse
NOT Niega una condición

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. 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 confiar en que el lector recuerde la precedencia.

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;

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, 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

  • WHERE: utiliza estas expresiones para filtrar filas.
  • CASE: evalúa condiciones y produce un valor.
  • IF: decide qué bloque de instrucciones ejecutar.
  • EXISTS: convierte la presencia de filas en una condición.