aplica en el select...
no necesariamente con joins...
cuando es agregada, no aplica bloqueos compartidos ni respeta los bloqueos exclusivos... es decir, puedes leer la tabla aun cuando tenga transacciones pendientes (los updates, deletes e inserts, generan estos bloqueos asegurar la integridad de la informacion).
Se utiliza para evitar que un select no quede esperando a que las transacciones de una tabla terminen, ojo, no aplica en todos los casos ya que puede haber informacion sensible en el proceso y nos podria traer problemas en la concurrencia.
Para probar, utiliza el Query Analizer (dos pantallas o sesiones), en la primera genera un insert o update en una tabla (con su correspondiente transaccion) pero no la completes... y en la segunda pantalla intenta hacerle un select a la misma tabla, notaras que mientras no se complete la transaccion el select no se ejecutará, a menos que le agregues el nolock...entonces no importara si la transaccion esta incompleta o no...
Ej.
Código:
1ra pantalla (sesion).
Begin Tran T_MiTran
update MiTabla
Set MiCampo = @MiValor
Where <MiCondicion>
-- Esta ultima sentencia no la ejecutes
Commit Tran T_MiTran
2da. Pantalla.
Select *
From MiTabla