My error. I filtered this query by enclosing it in a procedure called GetEmployees(), which returned an iQueryable list:
results = HRFunctions.GetEmployees().Where(x => x.ad != null);
EntityFramework shrewdly changed the LEFT JOIN to an INNER JOIN because the WHERE clause believed AD shouldn't be null.
Now that the.Where() has been removed, AssignmentDetails is a Left Join.