Que yo sepa la única diferencia es el alcance de los efectos como dijo Strommy. NOLOCK insinúa sobre una mesa y LEE NO COMPROMETIDO en la sesión.
En cuanto a los problemas que pueden ocurrir, se trata de consistencia. Si le importa, tenga en cuenta que podría obtener lo que se denomina lecturas sucias que podrían influir en otros datos manipulados con información incorrecta.
Personalmente, no creo haber visto ningún problema con esto, pero eso puede deberse más a la forma en que uso nolock. Debe tener en cuenta que hay situaciones en las que se podrá utilizar. Escenarios en los que, en general, agrega datos nuevos a una tabla, pero tiene otro proceso que viene detrás para verificar un escenario de datos. Eso probablemente sea correcto ya que el flujo principal no incluye retroceder y actualizar filas durante una lectura.
También creo que en estos días debe consultar el Control de Concurrencia de varias 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 que deben usar. Voy a incluir un enlace y dejo más investigaciones para el lector:
MVCC
Database Isolation Levels
Considere "REPEATABLE READ" en lugar de "SERIALIZABLE" 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). – Kryptos