Que yo sepa, la única diferencia es el alcance de los efectos, como dijo Strommy. Pista NOLOCK en una mesa y READ UNCOMMITTED en la sesión.
En cuanto a los problemas que pueden ocurrir, se trata de coherencia. Si le importa, tenga en cuenta que podría obtener lo que se denomina lecturas sucias que podrían influir en la manipulación de otros datos con información incorrecta.
Personalmente, no creo que haya visto ningún problema con esto, pero puede deberse más a cómo uso nolock. Debe tener en cuenta que hay escenarios en los que estará bien usar. Escenarios en los que principalmente está agregando datos nuevos a una tabla, pero tiene otro proceso que viene detrás para verificar un escenario de datos. Eso probablemente estará bien, ya que el flujo principal no incluye volver atrás y actualizar filas durante una lectura.
También creo que en estos días debería considerar el control de simultaneidad de múltiples versiones. Creo que lo agregaron en 2005 y ayuda a evitar que los escritores bloqueen a los lectores al brindarles a los lectores una instantánea de la base de datos para usar. Incluiré un enlace y dejaré más investigación al lector:
MVCC
Niveles de aislamiento de la base de datos
REPEATABLE READ
lugar deSERIALIZABLE
si no le importan los datos fantasma.SERIALIZABLE
es REALMENTE restrictivo y casi nunca debe usarse (excepto, por ejemplo, en algunas aplicaciones financieras críticas).