¿por qué hibernate hql distinct causa un sql distinto en la unión izquierda?

Tengo esta prueba HQL:

select distinct o from Order o left join fetch o.lineItems

y esohac generar un SQL distinto sin una razón obvia:

select distinct order0_.id as id61_0_, orderline1_.order_id as order1_62_1_...

El conjunto de resultados SQL es siempre el mismo (con y sin un SQL distinto):

order id | order name | orderline id | orderline name
---------+------------+--------------+---------------
       1 | foo        |            1 | foo item
       1 | foo        |            2 | bar item
       1 | foo        |            3 | test item
       2 | empty      |         NULL | NULL
       3 | bar        |            4 | qwerty item
       3 | bar        |            5 | asdfgh item

¿Por qué hibernar genera el SQL distinto? El SQL distinto no tiene ningún sentido y hace que la consulta sea más lenta de lo necesario. Esto es contrario a laPREGUNTAS MÁS FRECUENTE que menciona que hql distinto en este caso es solo un atajo para el transformador de resultados:

session.createQuery ("seleccionar distinto o de Orden o izquierda unirse a buscar o.lineItems"). list ();

Parece que está utilizando la palabra clave SQL DISTINCT aquí. Por supuesto, esto no es SQL, esto es HQL. Este distintivo es solo un atajo para el transformador de resultados, en este caso. Sí, en otros casos, un HQL distinto se traducirá directamente en un SQL DISTINCT. No en este caso: no puede filtrar duplicados en el nivel SQL, la naturaleza misma de un producto / unión lo prohíbe: desea duplicados o no obtiene todos los datos que necesita.

Gracia

Respuestas a la pregunta(2)

Su respuesta a la pregunta