Linq para NHibernate vs. ICriteria

Eu uso muito o LINQ em geral, especialmente o LINQ-to-Objects, portanto, sou bastante fluente no LINQ.

Eu estava pensando em usar o LINQ-to-NHibernate como a linguagem de consulta para o meu projeto NHibernate. Quando escrevi alguns testes, notei que o LINQ to NHibernate não faz a mesma consulta que o ICriteria. Desde que eu prefiro usar o LINQ, eu gostaria de perguntar se alguém sabe de diferenças semelhantes, ou eu deveria apenas não se preocupar com o desempenho em geral (as operações de alto desempenho precisariam de alguns ajustes com o NHibernate de qualquer maneira isto). Veja o seguinte exemplo:

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

me dá o seguinte 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

enquanto que

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

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, o LEFT JOIN não seria necessário.

Há algo errado com minha consulta LINQ ou é apenas uma limitação? E eu deveria me preocupar com isso em primeiro lugar?

Icey

EDIT: eu tentei alterar a instrução LINQ para o seguinte:

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

o SQL gerado é o mesmo, no entanto.

questionAnswers(2)

yourAnswerToTheQuestion