Sysprocedures contains entries for each view, default, rule, trigger, procedure, declarative default, and check constraint. The plan or sequence tree for each object is stored in binary form.
The query plan is in the procedure cache. It can be in the table sysqueryplans if you're using the abstract plans. In the first execution (or if the previous query plan went out the procedure cache), it is not in the the procedure cache => the query plan must be recalculated and enter in the procedure cache