Добре, ето какво бих препоръчал. Искате да промените вашата клауза where, за да посочите само дубликатите. Освен това наистина искате да разглеждате само активните записи, защото няма значение дали има дубликати на неактивни записи.
За да видите дали има дубликат, можете да използвате exists
. За да използваме съществуването, първо ще напишем подзаявка за изтегляне на дублиращи се записи, т.е. всичко със същото име и фамилия, различен идентификатор и също е активно. Ако подзаявката изтегли нещо обратно, exists ще върне true и ние ще актуализираме записа. Ако няма дубликати, подзаявката няма да вземе никакви записи и съществува ще върне невярно. Тогава няма да актуализираме записа.
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)