Actualización de SQL, misma consulta, resultados diferentes cada vez

Tengo una consulta SQL que estoy probando y ejecutando como a continuación, pero noté que parecía devolver datos diferentes cada vez, ¡luego me di count de que incluso devolvía una cantidad diferente de filas cuando comprobé si funcionaba! Lo he ejecutado varias veces y la statement de selección final regresará entre 25-32 filas, pero ¿cómo puede cambiar esto?

Estoy usando begin tran y rollback tran para trabajar en los mismos datos, y no creo que este sea el problema. ¿Alguien puede detectar lo que he hecho mal?

Funciona en una tabla ( #AddressToDeleteMasterOfLesserId ) que es pares de Id y establece una marca (IsPrimaryAddress) en la dirección del Cliente si existe en la tabla y su par tiene el indicador establecido. #AddressToDeleteMasterOfLesserId ya se ha definido y no cambia.

  begin tran t1 select CustomerAddress.IsPrimaryAddress, p1.[Id that is master],p1.[Id to delete], c2.IsPrimaryAddress FROM CustomerAddress join #AddressToDeleteMasterOfLesserId p1 on CustomerAddress.Id=p1.[Id that is master] join CustomerAddress c2 on p1.[Id to delete]=c2.Id order by [Id that is master] --Update primary address UPDATE CustomerAddress SET IsPrimaryAddress = CASE WHEN c2.IsPrimaryAddress=1 THEN 1 ELSE 0 END FROM CustomerAddress join #AddressToDeleteMasterOfLesserId p1 on CustomerAddress.Id=p1.[Id that is master] join CustomerAddress c2 on p1.[Id to delete]=c2.Id select CustomerAddress.IsPrimaryAddress, p1.[Id that is master],p1.[Id to delete], c2.IsPrimaryAddress FROM CustomerAddress join #AddressToDeleteMasterOfLesserId p1 on CustomerAddress.Id=p1.[Id that is master] join CustomerAddress c2 on p1.[Id to delete]=c2.Id where CustomerAddress.IsPrimaryAddress=0 and c2.IsPrimaryAddress=1 order by [Id that is master] rollback tran t1 

Su tabla #AddressToDeleteMasterOfLesserId debe contener algunos pares donde el mismo Id that is master está emparejado con más de un Id to delete y esos Ids to delete tienen diferentes valores coincidentes de IsPrimaryAddress en la tabla CustomerAddress .

En la etapa de actualización, el Id that is master IsPrimaryAddress la fila IsPrimaryAddress se actualiza de forma aleatoria con 1 o 0, dependiendo de qué Id to delete coincidencia Id to delete sea ​​seleccionado como la fuente del nuevo valor.

La única forma en que esto no dará como resultado la misma salida en cada ejecución sería que o bien estás haciendo otra cosa fuera de esto, alguien más está haciendo otra cosa fuera de esto, o existe la posibilidad de que esto se vuelva torpe si tienes más de una transacción abierta. Si es el último, y / o para probarlo, simplemente ejecute ROLLBACK TRAN hasta que obtenga un error que indique que no hay transactions abiertas. Si obtiene el error la primera vez, entonces no tiene ningún abierto.