To elaborate on this further... I know it is 2 months old (I still have not found a solution). It looks as if the caching mechanism is so advanced that if the first run of the query fails (before it is cached), it will cache the crashed query. I know, it sounds odd. If this piece of code executes...
<cfquery datasource="#dsn#" name="q" cachedwithin="#createTimeSpan(0,0,30,0)#">
Some fancy SQL
</cfquery>
And the above crashes, the page will cache the broken query and that means the page will not work until the cache is changed to 0,0,0,0 (or emptied). The page will come back with an error that q does not exist. I have not found a solution yet other than to disable caching on queries that might crash.