Tema SQL
NEWID() (SQL Server)
GUID aleatorio (uniqueidentifier), típico para claves o tokens. En MySQL el rol similar es UUID(); NEWSEQUENTIALID() existe solo como DEFAULT cluster-friendly.
Descripción
NEWID() no es secuencial: los valores son aleatorios (versión 4 UUID en la práctica de SQL Server). Para GUIDs ordenados para índices cluster (menos fragmentación) existe NEWSEQUENTIALID() restringido a DEFAULT de columna. Insertar NEWID() en SELECT puede generar un valor por fila. No uses NEWID() en predicados que deban ser deterministas entre ejecuciones. En MySQL UUID() devuelve cadena de UUID v1; para almacenamiento compacto en SQL Server se usa BINARY(16) con conversión. Réplicas y merge: planifica colisiones (probabilidad despreciable) y orden en índices.
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.
NEWID()
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.
- uniqueidentifier
- Tipo nativo; convierte a CHAR(36) para texto.
- NEWSEQUENTIALID
- Solo en DEFAULT; reduce fragmentación de índice cluster.
- MySQL
- UUID() cadena; BINARY(16) para compactar.
Ejemplos
Ejemplo 1
SELECT NEWID() AS id_aleatorio;
INSERT INTO sesiones (id, creado_en)
VALUES (NEWID(), SYSDATETIME());
Ejemplo 2
SELECT NEWID() AS a, NEWID() AS b;
-- dos GUID distintos en una sola fila
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.