Okay, så her er hvad jeg vil anbefale. Du vil ændre din where-klausul til kun at angive dubletterne. Desuden vil du egentlig kun se på de aktive poster, fordi det er lige meget, om der er dubletter af inaktive poster.
For at se om der er en dublet, kan du bruge en exists
. For at bruge eksistensen skal vi først skrive en underforespørgsel for at trække duplikerede poster tilbage, alias alt med det samme for- og efternavn, et andet id, og det er også aktivt. Hvis underforespørgslen trækker noget tilbage, vil exist returnere true, og vi opdaterer posten. Hvis der ikke er nogen dubletter, vil underforespørgslen ikke fange nogen poster, og exists vil returnere falsk. Så opdaterer vi ikke posten.
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)