Ok, então aqui está o que eu recomendaria. Você deseja alterar sua cláusula where para especificar apenas as duplicatas. Além disso, você realmente só quer ver os registros ativos porque não importa se há duplicatas de registros inativos.
Para ver se há uma duplicata, você pode usar um
exists
. Para usar o existe, primeiro vamos escrever uma subconsulta para recuperar registros duplicados, também conhecido como qualquer coisa com o mesmo nome e sobrenome, um id diferente e também ativo. Se a subconsulta puxar algo de volta, existe retornará true e atualizaremos o registro. Se não houver duplicatas, a subconsulta não capturará nenhum registro e o existente retornará false. Então, não atualizaremos o 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)