An IQueryable (before it is enumerated) is not the results them selves but the logic used to return those results.
To use a LINQ2SQL example... imagine you return an IQueryable of Clients.
Under the hood that will not be a list of clients (until you ToList() it) but will actualy be a SQL Query like so:
SELECT * FROM [Clients]
Now this is handy because we have not hit the database yet! So lets say when that IQueriable comes back we want to refine it down to Clients called "Bob" we can do:
var clients = GetClients().Where(c => c.Name == "Bob");
Now the IQueriable looks like this under the hood:
SELECT * FROM [Clients] WHERE Name = 'Bob'.
Now when I do clients.ToList(), that query will run, the database is hit, and I have a list of clients called bob without having to have selected all clients then trawl through them in memory, or perform 2 separate database hits.
For an example of this biting you in the behind try and get to child elements when your datacontext has dropped out of scope(e.g: run your select inside a using statement). This is where load options come in handy, in LINQ2SQL.
Hope that helps