Linq a NHibernate vs. ICriteria

Utilizo mucho LINQ en general, especialmente LINQ-to-Objects, por lo tanto soy bastante fluido en LINQ.

Estaba considerando usar LINQ-to-NHibernate como el lenguaje de consulta para mi proyecto NHibernate. Cuando escribí algunas pruebas, noté que LINQ-to-NHibernate no hace la misma consulta que ICriteria. Como prefiero usar LINQ, me gustaría preguntar si alguien sabe de diferencias similares, o simplemente no debería preocuparme por el rendimiento en general (las operaciones de alto rendimiento necesitarían algunos ajustes con el NHibernate de todos modos hasta donde llegue eso). Vea el siguiente ejemplo:

var query = (from inputItem in session.Linq<InputItem>()
             where inputItem.Project == project select inputItem).First();

Me da el siguiente SQL:

SELECT this_.ID as ID0_1_, this_.Name as Name0_1_, this_.Project_id as Project3_0_1_, project1_.ID as ID1_0_, project1_.Name as Name1_0_
    FROM "InputItem" this_ left outer join "Project" project1_ on this_.Project_id=project1_.ID
    WHERE this_.Project_id = @p0 limit 1;@p0 = 1, @p1 = 1

mientras

var criteria = session.CreateCriteria<InputItem>();
criteria.Add(Expression.Eq("Project", project));
criteria.SetMaxResults(1);
criteria.List();

da

SELECT this_.ID as ID0_0_, this_.Name as Name0_0_, this_.Project_id as Project3_0_0_
    FROM "InputItem" this_
    WHERE this_.Project_id = @p0 limit 1;@p0 = 1, @p1 = 1

Claramente, el JOIN IZQUIERDO no sería necesario.

¿Hay algún problema con mi consulta LINQ o es solo una limitación? ¿Y debería preocuparme en primer lugar?

Icey

EDITAR: Intenté cambiar la declaración LINQ a lo siguiente:

var query = (from inputItem in session.Linq<InputItem>()
             where inputItem.Project.ID == project.ID
             select inputItem).First();

Sin embargo, el SQL generado es el mismo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta