Ok, ecco cosa consiglierei. Vuoi cambiare la tua clausola where per specificare solo i duplicati. Inoltre, vuoi solo guardare i record attivi perché non importa se ci sono duplicati di record inattivi.
Per vedere se c'è un duplicato, puoi usare un exists
. Per utilizzare esiste, per prima cosa scriveremo una sottoquery per recuperare i record duplicati, ovvero qualsiasi cosa con lo stesso nome e cognome, un ID diverso ed è anche attiva. Se la sottoquery recupera qualcosa, esiste restituisce true e aggiorneremo il record. Se non ci sono duplicati, la sottoquery non acquisirà alcun record e l'exist restituirà false. Quindi, non aggiorneremo il record.
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)