Bien, esto es lo que recomendaría. Desea cambiar su cláusula where para especificar solo los duplicados. Además, realmente solo desea ver los registros activos porque no importa si hay duplicados de registros inactivos.
Para ver si hay un duplicado, puede usar exists
. Para usar existe, primero vamos a escribir una subconsulta para recuperar registros duplicados, es decir, cualquier cosa con el mismo nombre y apellido, una identificación diferente y que también esté activa. Si la subconsulta extrae algo, existe devolverá verdadero y actualizaremos el registro. Si no hay duplicados, la subconsulta no tomará ningún registro y el valor existente devolverá falso. Entonces, no actualizaremos el registro.
update u
set active = 0
From UserInfo u
where (SELECT count(*)
FROM UserRecords recs
where recs.UserId= u.UserId) = 0
and u.active = 1
and exists (Select 1
From UserInfo u2
Where u2.lastname = u.lastname
and u2.firstname = u.firstname
and u2.userid <> u.userid
and u2.active = 1)