Não sei por que você não está agrupando transações financeiras em transações de banco de dados (como quando você transfere fundos de uma conta para outra - você não confirma um lado da transação por vez - é por isso que existem transações explícitas). Mesmo se o seu código estiver relacionado às transações comerciais como parece, todos os bancos de dados transacionais podem fazer reversões implícitas no caso de erros ou falhas. Eu acho que essa discussão está bem acima da sua cabeça.
Se você estiver com problemas de bloqueio, implemente a versão e limpe seu código.
Nenhum bloqueio não apenas retorna valores errados, mas também devolve registros e duplicações fantasmas.
É um equívoco comum que sempre faça com que as consultas sejam executadas mais rapidamente. Se não houver bloqueios de gravação em uma tabela, isso não fará nenhuma diferença. Se houver bloqueios na tabela, isso poderá agilizar a consulta, mas existe um motivo pelo qual os bloqueios foram inventados.
Para ser justo, aqui estão dois cenários especiais em que uma dica nolock pode fornecer utilidade
1) Banco de dados do servidor sql anterior a 2005 que precisa executar uma consulta longa no banco de dados OLTP ativo, essa pode ser a única maneira
2) Aplicativo mal escrito que bloqueia registros e retorna o controle para a interface do usuário e os leitores são bloqueados indefinidamente. O Nolock pode ser útil aqui se o aplicativo não puder ser corrigido (terceiros etc.) e o banco de dados for anterior a 2005 ou o controle de versão não puder ser ativado.