It seems that you do not yet understand session state correctly. This sort of question keep regularly popping up both here and on the OTN apex forums.
From the docs:
HTTP, the protocol over which HTML pages are most often delivered, is
a stateless protocol. A web browser is only connected to the server
for as long as it takes to download a complete page. In addition, each
page request is treated by the server as an independent event,
unrelated to any page requests that happened previously or that may
occur in the future. To access form values entered on one page on a
subsequent page, the values must be stored as session state. Oracle
Application Express transparently maintains session state and provides
developers with the ability to get and set session state values from
any page in the application.
What this means in your case is that you thought that choosing a value from that LOV would alter the session state of that item. It does not. You choose a value on the client side, and that value will only be available there until it is pushed to the server somehow.
This is crucial to understand in apex! You need to understand this before you move on, because you will encounter situations like this again.
So now we have that behind us, let's move on to how you could remedy this.
The most basic way of pushing values to the server? Perform a page submit. The session state of all the items will be set with the values which they held on the client side (exceptions apply but let's ignore that for now).
Here is where you went wrong with your select list action: you performed a redirect. A redirect is not a page submission but just a redirect. By setting a value of a target item you only alter the session state of that one item.
So it is not that the SQL is not recognizing the variable, it's just that it has no value so nothing can be rendered.
Of course, submitting the page might not be something you want to do simply to set a field's value. Submitting might cause validations, branches or processes to fire.
That is what Tony Andrews suggests: use a dynamic action to dynamically retrieve the value. For example, you can set it up as such:
Now when the value on the select list changes, a call will be made to the server/database and a value will be returned and set in the description item.
There is more to it all but this should set you off in the right direction.