BETWEEN en SQL: qué es, cómo se usa y ejemplos prácticos

El operador BETWEEN en SQL se utiliza para filtrar resultados dentro de un rango de valores, incluyendo los extremos. Es muy común en consultas donde necesitamos seleccionar filas que cumplan con una condición entre dos límites, ya sea numéricos, de texto o de fechas.

Es uno de los operadores más usados en conjunción con la cláusula WHERE, ya que permite escribir consultas claras y fáciles de leer, en lugar de combinar múltiples comparaciones con AND / OR.

Sintaxis de BETWEEN

La forma general es:

valor [NOT] BETWEEN límite_inferior AND límite_superior
  • valor: la columna o expresión que queremos evaluar.
  • límite_inferior: el valor mínimo del rango.
  • límite_superior: el valor máximo del rango.
  • NOT: opcional, invierte la condición y devuelve los registros fuera del rango.

Ejemplos prácticos de BETWEEN

1. Números dentro de un rango

SELECT * 
FROM productos
WHERE precio BETWEEN 10 AND 50;

👉 Devuelve todos los productos cuyo precio esté entre 10 y 50, incluyendo ambos valores.

2. Fechas dentro de un rango

SELECT * 
FROM pedidos
WHERE fecha BETWEEN '2025-01-01' AND '2025-01-31';

👉 Obtiene todos los pedidos realizados en enero de 2025.

3. Texto dentro de un rango

SELECT * 
FROM clientes
WHERE nombre BETWEEN 'A' AND 'M';

👉 Lista los clientes cuyos nombres comienzan con letras de la A a la M.
(El comportamiento exacto puede variar según el motor de base de datos y la intercalación —collation— usada.)

4. Uso de NOT BETWEEN

SELECT * 
FROM empleados
WHERE edad NOT BETWEEN 30 AND 40;

👉 Devuelve todos los empleados cuya edad es menor a 30 o mayor a 40.

5. BETWEEN con expresiones

SELECT * 
FROM ventas
WHERE cantidad * precio_unitario BETWEEN 100 AND 500;

👉 Filtra ventas cuyo importe total esté entre 100 y 500.

BETWEEN vs. condiciones con AND

La condición:

precio BETWEEN 10 AND 50

es equivalente a:

precio >= 10 AND precio <= 50

Usar BETWEEN hace la consulta más corta y fácil de leer. Sin embargo, en casos donde se necesita mayor control (ejemplo: valores estrictamente mayores o menores), conviene usar comparaciones explícitas.

¿Qué tipos de datos admite BETWEEN?

  • Números: enteros, decimales, flotantes.
  • Fechas y tiempos: DATE, DATETIME, TIMESTAMP.
  • Cadenas de texto: se evalúan según el orden de colación definido en la base de datos.

👉 Importante: los extremos del rango siempre se incluyen (es un rango cerrado).

Casos de uso comunes de BETWEEN

  1. Reportes financieros: mostrar facturas emitidas en un período determinado.
  2. Estadísticas de ventas: productos con precios en un rango específico.
  3. Gestión de usuarios: filtrar por edades dentro de un segmento (ej. 18 a 25 años).
  4. Inventarios: mostrar stock entre ciertos niveles.
  5. Filtros en aplicaciones web: búsquedas con rangos (fecha, precio, puntaje, etc.).

Errores comunes con BETWEEN

  • Confundir inclusividad: muchos piensan que BETWEEN excluye los extremos, pero en realidad incluye tanto el límite inferior como el superior.
  • Comparar cadenas sin considerar collation: SELECT * FROM clientes WHERE nombre BETWEEN 'A' AND 'Z'; Puede no devolver lo esperado si la base de datos es sensible a mayúsculas/minúsculas o al idioma.
  • Usar BETWEEN en campos con NULL: los registros con valores NULL no se incluyen, ya que cualquier comparación con NULL devuelve UNKNOWN.
  • Esperar resultados con rangos invertidos: precio BETWEEN 50 AND 10 No devuelve nada, salvo que el motor lo reordene (ej. MySQL lo acepta, PostgreSQL no). Siempre usar el límite inferior primero.

Buenas prácticas al usar BETWEEN

  • Verificar el formato de fechas: asegurarse de que los valores estén en el mismo formato que la base de datos espera (YYYY-MM-DD).
  • Combinar con índices: usar BETWEEN en columnas indexadas mejora mucho la performance.
  • Prefiere BETWEEN a múltiples condiciones cuando los extremos deben incluirse.
  • Usar CAST cuando sea necesario: si se comparan tipos distintos (ej. string vs fecha), conviene hacer conversión explícita.

Ejemplo avanzado: ventas en el último trimestre

SELECT cliente_id, SUM(total) AS total_trimestre
FROM ventas
WHERE fecha BETWEEN '2025-04-01' AND '2025-06-30'
GROUP BY cliente_id
HAVING SUM(total) > 1000;

👉 Devuelve clientes que gastaron más de 1000 unidades monetariasdurante el segundo trimestre de 2025 (ejemplo típico con GROUP BY y HAVING).

Preguntas frecuentes (FAQ)

1. ¿BETWEEN incluye los valores límite?
Sí, siempre incluye tanto el valor inferior como el superior.

2. ¿Se puede usar BETWEEN con texto?
Sí, pero depende de la colación del motor. En algunos casos, 'Z' puede no incluir todas las letras (ej. Ñ).

3. ¿Qué diferencia hay entre BETWEEN y IN?

  • BETWEEN: define un rango continuo.
  • IN: selecciona valores específicos.

4. ¿BETWEEN funciona con fechas y horas?
Sí, incluso con DATETIME. Solo hay que asegurarse de incluir las horas cuando corresponda.

5. ¿Puedo usar variables o subconsultas en BETWEEN?
Sí. Ejemplo:

SELECT * 
FROM productos
WHERE precio BETWEEN (SELECT MIN(precio) FROM productos)
                AND (SELECT MAX(precio) FROM productos);

Conclusión

El operador BETWEEN en SQL es una herramienta muy útil para filtrar resultados dentro de un rango. Su sintaxis simple lo hace más legible que escribir comparaciones múltiples con AND, y es compatible con números, fechas y cadenas de texto.

Sin embargo, es importante recordar que siempre incluye los valores límite, que los NULL no son considerados y que el orden de los extremos importa. Usar BETWEEN correctamente te permitirá escribir consultas más limpias, rápidas y fáciles de entender.

Vé cómo se usa en filtros dentro de WHERE y condiciones y repasa más términos en el Glosario SQL completo.

Scroll al inicio