Caso um usuário tenha dois cadastro na base de dados que ocorreu por engano, para eliminar essa duplicação, há alguns passos a serem seguidos.
Mapear lista de usuários duplicados
O primeiro passo é mapear a lista de usuários duplicados. Isso deve ser feita pesquisando na base pelos campos que os dois usuários tenham em comum. Se o campo comum for e-mail, execute contagem usando GROUP BY campo e-mail. Segue o comando SQL que faz isso.
SELECT email,COUNT(email) as countrecord FROM mdl_user GROUP BY email HAVING COUNT(email) > 1
O comando acima retorna a lista de registro com duplicidade. Agora, é necessário mapear cada id dos usuários duplicados. Para isso, execute uma consulta na base para retornar ID de cada registro da consulta anterior. Para isso, execute o seguinte comando SQL:
SELECT id FROM mdl_user WHERE email=?
Essa consulta extrai a lista de ID de cada registro duplicado
Unificar os registros
Após mapear os registros duplicados, agora é necessário unificar. Caso o acesso ao curso tenha ocorrido só com um determinado ID, a solução é remover o id que não ocorreu acesso. Mas se o acesso ocorreu com os dois ids, a alternativa é fundir o id de um no outro. Isso deve ser feita em todas as tabelas onde ocorreu registo.
Vamos demonstrar isso em algumas tabelas (user, log, fórum e quadro de notas) e orientar como proceder para os demais.
Imagine que usuário X está duplicado é tem dois ids: 200 e 300. A solução é converter tudo que foi feito no id 200 para 300. Para isso, execute os seguintes comandos:
Tabela de usuário
UPDATE mdl_user SET id=300 WHERE id=200
Tabela de log a partir da versão 2.7
UPDATE mdl_logstore_standard_log SET userid=300 WHERE userid=200
Tabela de log antes da versão 2.7
UPDATE mdl_log SET userid=300 WHERE userid=200
Participação no fórum
UPDATE mdl_forum_posts SET userid=300 WHERE userid=200;
UPDATE mdl_forum_discussions SET userid=300 WHERE userid=200;
Tabela geral de notas
UPDATE mdl_grade_grades SET userid=300 WHERE userid=200
Os demais dados devem ser mapeados através das tarefas instanciadas no curso. Por exemplo, se o curso usa fórum, basta mapear todas as tabelas com prefixo fórum mdl_forum_*. Siga esse padrão e mapeie todas as tabelas seguindo padrão de nome das tarefas usados nos cursos. Padrão de tabelas: md_<nomedopligun>_*
Há um post que traz uma metodologia similar, que explica como apagar dados dos usuários. Sugiro leitura desse post que pode ajudar a mapear mais tabelas. Segue o post:
Apagar Nota, Atividades e Log do Aluno no Curso do Moodle com Comando SQL
http://moodlesql.blogspot.com.br/2010/10/apagar-nota-atividades-e-log-do-aluno.html