¿Por qué LINQ to SQL traduce GroupBy en múltiples consultas?

He notado que incluso mis consultas LINQ más simples que usan GroupBy se traducen en tantas consultas SQL como claves de grupo. No he encontrado ninguna explicación de por qué sucede esto o cómo puedo evitarlo.

Por ejemplo, la consulta:

from p in People group p by p.Name into g select g

se traduce a tantosselects como valores diferentes para la columnaName, como este:

-- Region Parameters
DECLARE @x1 VarChar(20) SET @x1 = 'John'
-- EndRegion
SELECT [t0].[Name], [t0].[SurName]
FROM [People] AS [t0]
WHERE ((@x1 IS NULL) AND ([t0].[Name] IS NULL)) 
     OR ((@x1 IS NOT NULL) AND ([t0].[Name] IS NOT NULL) AND (@x1 = [t0].[Name]))
GO

Sin embargo, si traigo toda la tabla a la memoria, como llamarAsEnumerable(),

from p in People.AsEnumerable() group p by p.Name into g select g

solo se emite una única selección, recuperando todas las filas y luego LINQ realiza la agrupación en la memoria.

Este comportamiento me parece bastante confuso y propenso a errores, ya que a menudo me encuentro componiendo consultas complejas en diferentes declaraciones y debo ser lo suficientemente cuidadoso como para llamarAsEnumerable oToList antes de realizar unGroupBy o mi rendimiento se degrada. Peor aún, me obliga a terminar miLINQ to SQL consultar y continuar conLINQ to Objects.

He probado esto usandoLINQ to Entities yLINQ to SQL (medianteLINQPad), siendo el DBMSSQL Server.

¿Me estoy perdiendo de algo? ¿Es esto por diseño o hay alguna forma de escribir la consulta LINQ de tal manera que SQL'sGROUP BY se usa en lugar de generar múltiples consultas individuales?