Разница в том, что IQueryable - это интерфейс, который позволяет реализовать запрос LINQ-to-SQL (LINQ.-to-anything). Поэтому, если вы уточните свой запрос на IQueryable, этот запрос будет выполнен в базе данных, если это возможно.
Для случая IEnumerable это будет LINQ-to-object, что означает, что все объекты, соответствующие исходному запросу, должны быть загружается в память из базы данных.
IQueryable<Car> query1 = from car in db.Cars
where car.id > 3
select car;
Этот код будет выполнять SQL для выбора только машин с id > 3. Следующий код, с другой стороны, выполнит исходный запрос в базе данных, а затем отфильтрует машины в памяти:
IEnumerable<int> query2 = from car in db.Cars
where car.id > 3
select car;
Это довольно важное различие, и работа над IQueryable может во многих случаях избавить вас от возврата слишком большого количества строк из базы данных.