Tema SQL
RAND() (MySQL / MariaDB)
Devuelve un número pseudoaleatorio en [0,1). Con semilla opcional la secuencia es reproducible entre ejecuciones con la misma semilla.
Descripción
RAND() sin argumentos genera valor flotante distinto por fila en consultas grandes (cuidado con coste y no determinismo en réplicas). RAND(n) fija la semilla para pruebas repetibles. Uso típico: ORDER BY RAND() LIMIT k para muestra aleatoria pequeña; en tablas enormes es caro porque fuerza ordenación aleatoria completa — valora TABLESAMPLE en otros motores o muestreo por rango de id. Para criptografía no uses RAND: son PRNG no criptográficos. En tests, RAND(seed) permite reproducir datasets sintéticos.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
RAND([semilla_opcional])
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Muestreo
- ORDER BY RAND() es simple pero O(n log n) en filas tocadas.
- Semilla
- Misma semilla ⇒ misma secuencia en la sesión.
- Portabilidad
- RANDOM() en PostgreSQL, RAND en SQL Server.
Ejemplos
Ejemplo 1
SELECT RAND() AS u;
SELECT * FROM productos
ORDER BY RAND()
LIMIT 5;
Ejemplo 2
SELECT id, nombre
FROM sorteo
WHERE RAND(42) IS NOT NULL
ORDER BY RAND(42)
LIMIT 10;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.