It's an optimization trick We had what you suggest before, I think before 4.2, not sure, but then the resultsets are different if you do or don't exclude fields. That would mean to materialize an entity we needed to read/write each field value individually (as it could be on a different ordinal in the row).
By returning NULL for an excluded field, the resultsets for a query with and without excluded fields is the same, so we can then simply pull the full row from the datareader and store it in the entity in 1 go. This is much faster than reading fields individually