Boa noite!
Não sei se você colou o SELECT parcial, mas caso tenha colado o SQL completo que você está usando, senti falta de um JOIN.
Caso você tenha feito o JOIN, porém, não tenha colado na tela, desconsidere o resto da mensagem.
Mas quando você coloca as tabelas no FROM sem fazer join via INNER, LEFT, nem na cláusula WHERE, ocorre algo semelhante a um CROSS JOIN, que gera um produto cartesiano.
Neste caso, a consulta relaciona todos os registros entre as duas (ou mais) tabelas que não tem a ligação especificada.
Por exemplo, se você tiver uma tabela “de disciplina” contendo:
id nome
01 portugues
02 matematica
03 história
e outra tabela ensino contendo:
id nome
01 ensino a
02 ensino b
03 ensino c
04 ensino d
o SELECT para nomes das disciplinas e ensinos sem join retornaria algo semelhante com:
disciplina_nome ensino_nome
portugues ensino a
portugues ensino b
portugues ensino c
portugues ensino d
matematica ensino a
matematica ensino b
...
Portugues apareceria uma vez para cada ensino, mesmo que só possuísse ligação com ensino c. E isto daria a impressão dele estar vindo repetido por um erro da ferramenta.
Como disse no início, não sei se é este o caso. Acredito que você testou a consulta fora do iReport direto na base também, para se certificar do resultado.
Mas com certeza, a dica de estudar um pouco mais do iReport é boa.