SQL Queries do have execution plans that are cached, but SQL Server will only reuse the execution plan if the SQL is an exact textual match against the cached plan.

Here's an article about SQL caching, good read (relates to SQL7, but is still valid)SQL Caching

There's a good example of 3 SQL statements, where one will generate a new execution plan. All of these SQL statements could have been handled by a single SP that uses parameters, and SQL Server would have a ready execution plan.