No NHibernate, usar uma disjunção dá resultados duplos

Eu estou tentando fazer um select com DetachedCriteria, eu quero adicionar várias condições separadas por OR em tempo de execução.

Se eu usar:

Restrictions.Or( cond1, Restrictions.Or(cond2, Restrictions.Or(cond3, cond4)) )

Eu obtenho o resultado que quero.

Mas se eu usar uma disjunção assim:

var disjunction = Restrictions.Disjunction();
disjunction.Add(cond1);
disjunction.Add(cond2);
disjunction.Add(cond3);
disjunction.Add(cond4);

E eu tenho entidades que cond1 e cond2 são verdadeiras para eles, nos resultados eu recebo duas vezes (a mesma entidade exata é retornada duas vezes no resultado da lista).

Eu não quero usar o QueryOver porque estou tentando realizar algo que é difícil de fazer com o QueryOver (o resultado final do que estou tentando fazer é obter uma consulta sql de um json de filtros).

O que está causando a disjunção para retornar duplas? Existe uma maneira de adicionar um DISTINCT no final? Estou fazendo errado e não devo usar disjunção para condições diferentes na mesma mesa?

ATUALIZAR:

Para a parte DISTINCT:

criteria.SetResultTransformer(new NHibernate.Transform.DistinctRootEntityResultTransformer());

ou

Projections.Distinct(Projections.Id())

A solução real é como afirmado porRadim Köhler - O uso correto de uma subconsulta.

questionAnswers(1)

yourAnswerToTheQuestion