No estoy seguro de por qué no está envolviendo transacciones financieras en transacciones de bases de datos (como cuando transfiere fondos de una cuenta a otra, no compromete un lado de la transacción a la vez, es por eso que existen transacciones explícitas). Incluso si su código es un cerebro inteligente para las transacciones comerciales como parece, todas las bases de datos transaccionales tienen el potencial de hacer retrocesos implícitos en caso de errores o fallas. Creo que esta discusión está muy por encima de tu cabeza.
Si tiene problemas de bloqueo, implemente el control de versiones y limpie su código.
Sin bloqueo no solo devuelve valores incorrectos, devuelve registros fantasma y duplicados.
Es un error común pensar que siempre hace que las consultas se ejecuten más rápido. Si no hay bloqueos de escritura en una tabla, no hay diferencia. Si hay bloqueos en la tabla, puede hacer que la consulta sea más rápida, pero hay una razón por la cual se inventaron bloqueos en primer lugar.
Para ser justos, aquí hay dos escenarios especiales donde una sugerencia de nolock puede proporcionar utilidad
1) La base de datos del servidor SQL anterior a 2005 que necesita ejecutar una consulta larga contra la base de datos OLTP en vivo, esta puede ser la única forma
2) La aplicación mal escrita que bloquea registros y devuelve el control a la interfaz de usuario y los lectores se bloquean indefinidamente. Nolock puede ser útil aquí si la aplicación no se puede arreglar (terceros, etc.) y la base de datos es anterior a 2005 o no se puede activar el control de versiones.