Trochu jsem pracoval na poskytovateli entitního rámce a podíval jsem se na to. Domnívám se, že samotný poskytovatel v dané situaci nemá na výběr. Příkazový strom je vytvořen frameworkem entity a dává jej poskytovateli k sestavení SQL. Zde je to úplný odhad, ale možná důvod, proč v této situaci generuje spojení LEFT OUTER, je ten, že rámec entity skutečně neví, že v databázi existuje referenční omezení. Můžu například jít a makat s modelem entity poté, co je vytvořen z databáze, a přidat/změnit omezení, která nemají žádný vliv na to, co databáze dělá. Možná z tohoto důvodu se designéři rozhodli hrát na jistotu a vyrobit LEVÝ VNĚJŠÍ spoj "pro každý případ".
Přesto věřím, že můžete získat vnitřní spojení. Například následující způsobilo, že poskytovatel sestavil spojení LEFT OUTER:
var res2 = from a in ent.answers
select new
{ a.Answer1, a.user.UserName };
Výsledkem však bude VNITŘNÍ spojení:
res2 = from a in ent.answers
join u in ent.users
on a.UserID equals u.PK
select new { a.Answer1, u.UserName };
Také následující entita SQL vytvořila vnitřní spojení:
ObjectQuery<DbDataRecord> dr = ent.CreateQuery<DbDataRecord>(
"SELECT a.answer1, u.username " +
"FROM answers as a inner join users as u on a.userid = u.pk" );