En el vasto mundo de la gestión de bases de datos con SQL, una de las tareas más comunes y esenciales es la de filtrar la información para encontrar exactamente los datos que necesitamos. A menudo, este filtrado implica buscar valores que se encuentran dentro de un intervalo determinado. Es aquí donde el operador BETWEEN se convierte en una herramienta invaluable, ofreciendo una sintaxis clara y concisa para realizar selecciones basadas en un rango específico.

El operador BETWEEN en SQL es una forma lógica y legible de especificar que un valor debe estar dentro de un rango definido. Este rango es siempre inclusive, lo que significa que los valores de inicio y fin que especifiquemos forman parte del conjunto de resultados potenciales. Ya sea que estés trabajando con cifras numéricas, cadenas de texto o puntos en el tiempo (como fechas), BETWEEN simplifica la tarea de escribir condiciones de filtro complejas.
- ¿Qué es el operador BETWEEN en SQL?
- Sintaxis Básica de BETWEEN
- Uso de BETWEEN con Diferentes Tipos de Datos
- El Operador NOT BETWEEN
- BETWEEN vs. Operadores de Comparación (>= y <=)
- Consideraciones Importantes al Usar BETWEEN
- Ejemplos Adicionales y Combinaciones
- Preguntas Frecuentes (FAQ) sobre BETWEEN
- Conclusión
¿Qué es el operador BETWEEN en SQL?
El operador BETWEEN se utiliza dentro de la cláusula WHERE de una sentencia SQL para seleccionar valores que se encuentran entre dos valores definidos. Su principal ventaja radica en que hace que las consultas sean más fáciles de leer y entender en comparación con el uso combinado de los operadores >= (mayor o igual que) y <= (menor o igual que).
La definición clave es que evalúa si una expresión está dentro de un intervalo especificado. Si el valor de la expresión es igual o superior al primer valor Y al mismo tiempo es igual o inferior al segundo valor, la condición BETWEEN devuelve verdadero (True). De lo contrario, devuelve falso (False).
Sintaxis Básica de BETWEEN
La sintaxis general para utilizar el operador BETWEEN es la siguiente:
WHERE columna_a_filtrar BETWEEN valor_inicio AND valor_fin;
Aquí:
columna_a_filtrares el nombre de la columna cuyos valores deseas evaluar.valor_inicioes el valor más bajo del rango (o el valor de inicio en el caso de texto/fechas).ANDes una palabra clave obligatoria que separa los dos valores del rango.valor_fines el valor más alto del rango (o el valor de fin en el caso de texto/fechas).
Es crucial recordar que tanto valor_inicio como valor_fin están incluidos en el rango que define BETWEEN.
Uso de BETWEEN con Diferentes Tipos de Datos
Una de las fortalezas de BETWEEN es su versatilidad. Puede ser aplicado a columnas que contienen datos numéricos, cadenas de texto y valores de fecha/hora.
BETWEEN con Números
El uso más intuitivo de BETWEEN es con datos numéricos. Permite seleccionar filas donde un valor numérico cae dentro de un intervalo específico.
Consideremos una tabla llamada Productos con una columna Precio. Queremos encontrar todos los productos cuyo precio está entre 10 y 20 (ambos inclusive).
SELECT * FROM Productos WHERE Precio BETWEEN 10 AND 20;
Esta consulta devolverá todas las filas donde el precio sea 10, 20 o cualquier valor entre ellos.
BETWEEN con Cadenas de Texto
Aunque pueda parecer menos obvio, BETWEEN también funciona con cadenas de texto. En este caso, el rango se determina en función del orden alfabético (o, más precisamente, el orden de clasificación definido por la base de datos, que suele ser alfabético).
Usando la misma tabla Productos, supongamos que queremos encontrar productos cuyos nombres están alfabéticamente entre 'Carnarvon Tigers' y 'Mozzarella di Giovanni'.
SELECT * FROM Productos WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni';
Esta consulta seleccionará productos cuyos nombres empiecen con 'Carnarvon Tigers', 'Mozzarella di Giovanni', o cualquier nombre que, según el orden alfabético, se encuentre entre estos dos. Es importante tener en cuenta la distinción entre mayúsculas y minúsculas, que puede variar según la configuración de la base de datos (sensible o insensible a mayúsculas/minúsculas).
BETWEEN con Fechas
Uno de los usos más prácticos de BETWEEN es para filtrar datos dentro de un rango de fechas. Esto es extremadamente común en aplicaciones que manejan registros de eventos, transacciones o cualquier dato con una marca de tiempo.

Imagina una tabla Pedidos con una columna FechaPedido. Queremos obtener todos los pedidos realizados en el año 2023.
SELECT * FROM Pedidos WHERE FechaPedido BETWEEN '2023-01-01' AND '2023-12-31';
Esta consulta seleccionará todos los pedidos cuya fecha esté comprendida entre el 1 de enero de 2023 y el 31 de diciembre de 2023, ambos días incluidos. Es vital asegurarse de que el formato de fecha utilizado en la consulta ('YYYY-MM-DD' en este ejemplo, un formato ISO estándar y recomendado) coincida con el formato y tipo de datos de la columna FechaPedido en tu base de datos (como DATE, DATETIME, TIMESTAMP, etc.). Un formato incorrecto podría llevar a resultados inesperados o errores.
Si la columna incluye información de hora además de la fecha, el comportamiento de BETWEEN en el límite superior ('2023-12-31') puede variar ligeramente dependiendo del sistema de base de datos específico. Algunos sistemas podrían interpretar '2023-12-31' como el inicio de ese día (00:00:00), excluyendo así cualquier registro con fecha del 31 de diciembre pero con una hora posterior. Para garantizar que se incluyan todas las horas del día final, podrías necesitar especificar la hora de fin explícitamente, como '2023-12-31 23:59:59' o utilizar funciones de fecha específicas de tu sistema de base de datos que manejen rangos de días completos de manera más robusta.
El Operador NOT BETWEEN
Así como puedes seleccionar valores *dentro* de un rango, también puedes seleccionar valores que se encuentran *fuera* de ese rango. Para ello, simplemente utilizas el operador NOT antes de BETWEEN.
La sintaxis es:
WHERE columna_a_filtrar NOT BETWEEN valor_inicio AND valor_fin;
Retomando el ejemplo de los precios de los productos, para encontrar productos cuyo precio NO está entre 10 y 20 (es decir, precios menores a 10 o mayores a 20):
SELECT * FROM Productos WHERE Precio NOT BETWEEN 10 AND 20;
Esta consulta devolverá todas las filas donde el precio es menor que 10 o mayor que 20. Al igual que BETWEEN, NOT BETWEEN también es inclusivo en sus límites; es decir, si el precio fuera exactamente 10 o 20, NO se incluiría en el resultado de NOT BETWEEN.
BETWEEN vs. Operadores de Comparación (>= y <=)
Como mencionamos al principio, BETWEEN es esencialmente una forma abreviada y más legible de combinar los operadores >= y <= junto con un AND lógico.
La siguiente consulta utilizando operadores de comparación:
SELECT * FROM Productos WHERE Precio >= 10 AND Precio <= 20;
Es funcionalmente equivalente a la consulta que utiliza BETWEEN:
SELECT * FROM Productos WHERE Precio BETWEEN 10 AND 20;
Aquí tienes una pequeña tabla comparativa:
| Característica | BETWEEN | >= AND <= |
|---|---|---|
| Sintaxis | columna BETWEEN val1 AND val2 | columna >= val1 AND columna <= val2 |
| Legibilidad | Generalmente más alta para rangos | Puede ser menos intuitiva de leer rápidamente para rangos |
| Concisión | Más concisa | Requiere repetir el nombre de la columna |
| Inclusividad | Siempre inclusivo en ambos extremos | Define la inclusividad explícitamente con los operadores |
| Funcionalidad | Equivalente para rangos inclusivos | Equivalente para rangos inclusivos |
En la mayoría de los casos, usar BETWEEN cuando necesitas filtrar por un rango inclusivo mejora la legibilidad de tu código SQL, lo que facilita su mantenimiento y comprensión por parte de otros desarrolladores (o incluso por ti mismo en el futuro).
Consideraciones Importantes al Usar BETWEEN
Si bien BETWEEN es sencillo, hay algunos puntos clave a tener en cuenta para evitar errores inesperados.
El Rango es Siempre Inclusivo
Reiteramos este punto porque es fundamental: valor_inicio y valor_fin están siempre incluidos en el conjunto de resultados si coinciden con los datos. Si necesitas un rango exclusivo (por ejemplo, mayor que 10 y menor que 20, sin incluir 10 ni 20), deberás usar los operadores > y <.
Ejemplo de rango exclusivo:
SELECT * FROM Productos WHERE Precio > 10 AND Precio < 20;
Manejo de Valores NULL
El comportamiento de BETWEEN con valores NULL es consistente con la lógica de tres valores de SQL (True, False, Unknown/NULL). Si la columna que estás evaluando (columna_a_filtrar) contiene un valor NULL, o si cualquiera de los valores del rango (valor_inicio o valor_fin) es NULL, la condición BETWEEN...AND evaluará a NULL. Dado que la cláusula WHERE solo incluye filas donde la condición es True, las filas donde la condición es NULL no se incluirán en el conjunto de resultados.
Por ejemplo, si tienes productos con Precio siendo NULL, la consulta WHERE Precio BETWEEN 10 AND 20 no los incluirá. De manera similar, si intentaras una consulta como WHERE Precio BETWEEN 10 AND NULL, ninguna fila sería devuelta porque la condición siempre sería NULL.
Limitaciones con Comodines (Wildcards)
Como se mencionó en la información proporcionada, los caracteres comodín (como % en SQL estándar o * en algunos dialectos como Microsoft Access) se tratan como caracteres literales cuando se usan con BETWEEN. Esto significa que no funcionan para buscar patrones dentro de un rango de texto de la manera en que lo hacen con el operador LIKE.

Por ejemplo, la siguiente consulta NO funcionará como esperas si intentas encontrar nombres que empiecen con 'A' hasta nombres que empiecen con 'C':
SELECT * FROM Productos WHERE ProductName BETWEEN 'A%' AND 'C%'; -- ¡Esto no funciona como Like!
En su lugar, buscará nombres que sean exactamente 'A%' o 'C%', o que estén literalmente entre esas dos cadenas si tuvieran un orden de clasificación definido. Para buscar rangos basados en patrones o prefijos, es mejor combinar el operador LIKE o utilizar funciones de cadena para extraer partes del texto y luego aplicar BETWEEN a esas partes extraídas, o usar múltiples condiciones LIKE combinadas con OR.
Ejemplo usando LIKE para un rango similar (nombres que empiezan con A, B o C):
SELECT * FROM Productos WHERE ProductName LIKE 'A%' OR ProductName LIKE 'B%' OR ProductName LIKE 'C%';
O para rangos más complejos, podrías usar funciones de texto si tu sistema de base de datos lo soporta:
SELECT * FROM Productos WHERE LEFT(ProductName, 1) BETWEEN 'A' AND 'C'; -- Esto funciona en algunos sistemas
Ejemplos Adicionales y Combinaciones
El operador BETWEEN se puede combinar con otros operadores lógicos como AND y OR para crear condiciones de filtro más complejas.
Por ejemplo, encontrar productos con un precio entre 10 y 20 Y que pertenezcan a la Categoría 1:
SELECT * FROM Productos WHERE Precio BETWEEN 10 AND 20 AND CategoriaID = 1;
O encontrar productos con un precio entre 10 y 20 O con un precio entre 50 y 60:
SELECT * FROM Productos WHERE (Precio BETWEEN 10 AND 20) OR (Precio BETWEEN 50 AND 60);
El uso de paréntesis en el segundo ejemplo ayuda a clarificar la lógica, aunque en este caso particular, debido a la precedencia de los operadores, la consulta funcionaría igual sin ellos.
Preguntas Frecuentes (FAQ) sobre BETWEEN
Aquí respondemos algunas preguntas comunes sobre el uso del operador BETWEEN en SQL.
¿El operador BETWEEN incluye los valores de inicio y fin?
Sí, el rango definido por BETWEEN es siempre inclusive, lo que significa que tanto el valor inicial como el valor final especificados en la cláusula AND están incluidos en el conjunto de resultados si coinciden con los datos.
¿Puedo usar BETWEEN con texto?
Absolutamente. Cuando se usa BETWEEN con cadenas de texto, la comparación se basa en el orden alfabético o lexicográfico de los caracteres. Seleccionará todos los valores de texto que caigan alfabéticamente entre los dos valores especificados (inclusive).
¿Funciona BETWEEN con fechas?
Sí, BETWEEN es muy útil para filtrar datos dentro de un rango de fechas. Debes asegurarte de que el formato de fecha en tu consulta coincida con el formato utilizado en tu base de datos para la columna de fecha para obtener resultados correctos.
¿Cómo selecciono valores que están fuera de un rango específico?
Para seleccionar valores que no están dentro del rango especificado, simplemente usa el operador NOT antes de BETWEEN. La sintaxis sería WHERE columna NOT BETWEEN valor1 AND valor2;.
¿Puedo usar caracteres comodín como '%' o '*' con BETWEEN?
No, los caracteres comodín no funcionan de la manera esperada con BETWEEN. Se tratan como caracteres literales. Para buscar patrones dentro de un rango de texto, es mejor usar el operador LIKE en combinación con otras condiciones si es necesario.
¿Qué sucede si uno de los valores en la comparación BETWEEN es NULL?
Si la columna que estás filtrando o cualquiera de los valores especificados en la cláusula BETWEEN es NULL, la condición BETWEEN...AND evaluará a NULL, lo que generalmente resulta en que esa fila no sea incluida en el conjunto de resultados de la consulta WHERE.
¿Hay alguna diferencia de rendimiento entre BETWEEN y usar >= AND <=?
En la mayoría de los sistemas de bases de datos modernos, el optimizador de consultas trata BETWEEN y la combinación >= AND <= como equivalentes desde el punto de vista de la ejecución y el rendimiento. La elección entre uno u otro suele basarse más en la legibilidad y preferencia personal.
Conclusión
El operador BETWEEN es una herramienta poderosa y conveniente en SQL para filtrar datos que se encuentran dentro de un rango especificado. Su sintaxis clara mejora la legibilidad de las consultas, especialmente cuando se trabaja con rangos numéricos, de texto o de fechas. Recordando su naturaleza inclusive y prestando atención al manejo de NULL y formatos de fecha, puedes utilizar BETWEEN de manera efectiva para simplificar y optimizar tus operaciones de filtrado en la base de datos.
Si quieres conocer otros artículos parecidos a Operador BETWEEN en SQL: Filtra por Rangos puedes visitar la categoría Bases de datos.

Aprende mas sobre MySQL