Sorry, shouldn't have used the term 'estimated'. I seem to have confused everyone. I'll explain better.
The terms estimated and actual for plans are actually a bit of a misnomer. A better description would be 'execution plan with run-time information' and 'execution plan without run-time information'
When, in management studio, someone clicks the 'display estimated execution plan' button, the query is compiled but not run, therefore there is no run-time information contained within it, only compile-time information.
When, in management studio, the query is run with the execution plan option enabled, the plan does contain the run-time for that specific execution, hence the plan contains things like 'actual row count, actual IO cost', etc
When a plan is cached, only the compile-time information is cached. The detailed run-time information is (I believe) discarded after updating the aggregated query stats. Hence, when you retrieve a query from the plan cache, it will not contain the run-time information. Consider a plan that's been used 20 times. Which execution's run-time information would it contain? Remember that there's only one plan in cache per procedure.
Profiler can capture (depending on event) the plan without the run-time information or the plan with the run-time information.
Does that make any sense to anyone?
Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability
We walk in the dark places no others will enter
We stand on the bridge and no one may pass