Ideal para reportes rápidos donde no importa una posible inconsistencia momentánea.
✅ Cuándo usar (NOLOCK)
- Consultas de solo lectura: Cuando no necesitas precisión absoluta (por ejemplo, reportes rápidos).
- Análisis exploratorios o dashboards: Donde los datos en tiempo real no son críticos.
- Grandes volúmenes de datos: Para evitar que una consulta impacte a otras operaciones concurrentes.
❌ Cuándo evitar (NOLOCK)
- Datos críticos o financieros: Puede provocar lecturas sucias (dirty reads), inconsistencias o registros fantasma.
- Procesos ETL o integraciones: Donde la precisión y consistencia son clave.
- Operaciones en tiempo real o de auditoría: Los errores por datos incorrectos podrían escalar rápidamente.
⚠️ Riesgos de (NOLOCK)
- Lecturas sucias: Puedes leer datos que están siendo modificados pero aún no confirmados.
- Lecturas fantasma: Registros pueden aparecer o desaparecer entre ejecuciones.
- Lecturas repetidas inconsistentes: Dos lecturas en la misma transacción pueden devolver datos diferentes.
✅ Alternativas a (NOLOCK)
- READ COMMITTED SNAPSHOT ISOLATION (RCSI): Usa versiones de datos para evitar bloqueos sin lecturas sucias.
- WITH (READPAST): Ignora filas bloqueadas sin riesgo de datos inconsistentes.
- Optimización de índices y consultas: Muchas veces los problemas de bloqueo se deben a malas prácticas de diseño.
SELECT [NombreCampo]
FROM [NombreDeLaTabla] WITH (NOLOCK)

Ventajas:
Los bloqueos no se producirán en comparación con otras consultas que se ejecuten contra los mismos datos se utiliza menos memoria debido a la falta de fila, página o nivel de nivel de bloqueo normalmente permite una concurrencia mucho mayor debido a la menor huella.
La otra ventaja indirecta es que se utilizará menos memoria para mantener cerraduras contra esos datos.
Desventajas:
Se pueden leer datos no comprometedores que conducen a lecturas sucias sugerencias explícitas contra una tabla son generalmente malas prácticas
Si ejecutamos nuestro SELECT sin NOLOCK podemos ver los bloqueos que se toman si ejecutamos el Stored Procedure sp_lock
USE master;
GO
EXEC sp_lock;
GO

En el ejemplo siguiente se muestra información, incluidos los bloqueos, acerca del proceso con Id : 65

👍 Comenta y comparte si este contenido te fue útil.
Ricardo A. Huamán Suárez
Especialista en SQL Server y Power BI. Ofrezco consultoría estratégica, formación especializada y servicios personalizados para empresas que buscan optimizar la gestión de sus datos.
No responses yet