Jeżeli chodzi o EF Core(SQL Server) to jest taka różnica:
var fName = _context.People.FirstOrDefault(x => x.Age > 30).FirstName;
var fName2 = _context.People.Where(x => x.Age > 30).Select(x => x.FirstName).FirstOrDefault();
W wynikowym SQLu przy pierwszym zapisie pobierany jest cały model bez relacji, a w drugim tylko FirstName
SELECT TOP(1)
[x].[Id], [x].[AccessFailedCount], [x].[ConcurrencyStamp] , [x].[Email], [x].[EmailConfirmed], [x].[LockoutEnabled], [x].[LockoutEnd], [x].[NormalizedEmail], [x].[NormalizedUserName], [x].[PasswordHash], [x].[PhoneNumber], [x].[PhoneNumberConfirmed], [x].[SecurityStamp], [x].[TwoFactorEnabled], [x].[UserName], [x].[Age], [x].[FirstName]
FROM [AspNetUsers] AS [x]
WHERE ([x].[Age] > 30)
SELECT TOP(1) [x].[FirstName]
FROM [AspNetUsers] AS [x]
WHERE [x].[Age] > 30
Czyli dłuższy zapis jest lepszy pod względem tego co wychodzi z bazy.