A standard Join only returns items that match in BOTH lists. A Left Outer Join returns all items from the left list, even if they have no match in the right list.
LINQ doesn't have a LeftJoin() method. Instead, you use a GroupJoin followed by SelectMany with DefaultIfEmpty(). This is the 'Standard Pattern' every .NET developer must memorize.
var leftJoin = from dept in departments
join emp in employees on dept.Id equals emp.DeptId into empGroup
from e in empGroup.DefaultIfEmpty() // Magic happens here
select new { dept.Name, EmployeeName = e?.Name ?? "None" };
Without DefaultIfEmpty(), any department with 0 employees would be filtered out of the results. By calling it, you ensure that even empty groups yield one 'null' item, which preserves the left-side record in the final result set.
Q: "Should I use the LINQ syntax or the Fluent Method syntax for Left Joins?"
Architect Answer: "Use the **Query Syntax** (from/join/into/from) for Left Joins. The equivalent Method Syntax (GroupJoin(...).SelectMany(...)) is significantly more verbose and much harder for a human to parse. This is the one case where Query Syntax is the clear winner for readability."