A lot of times I answer questions that I think the user could have solved on their own with minimal knowledge of google/bing. While I won't up-vote the question, I still like to help solve them for a few reasons:
to help the user out, after all, that's why we're here, right?
in some cases to suggest a better approach, since the problem the user is trying to solve might just be due to an unfortunate architecture decision (e.g. "how can I stop change data capture from killing my performance?"), or they may have already seem to have decided on the wrong solution (e.g. "how do I use dynamic SQL and cursors to do x?").
also hopefully to install some good coding/naming practices compared to what they might find out there (or what they might have presented in the code in their question).
a selfish reason: for my own practice, since I'm not in a position where I get to solve these kinds of problems anymore, and I kind of miss it sometimes.
I also don't up-vote questions when I have to pry and pry for enough information. "Doesn't work" and missing details about what has already been tried are up there, but most frequently I have to ask what version of SQL Server is being used. (As an aside, I wonder if it would be possible to enforce or at least suggest that the user pick a specific/minimum version for sql-server questions, if they've only tagged with sql-server - since solutions can be very different and much more efficient for 2005+ or 2008+. I think I know what my next feature request will be.)
Typically I up-vote questions that are challenging to solve or present a new problem that I haven't encountered before. I suspect that some people stay within their comfort zone. I do as well, to an extent - I stay in the SQL Server realm, but I do try to solve problems I don't have direct experience with. If I can already google the problem and come up with several solutions, it just isn't worth an up-vote IMHO, even if I do plan on posting an answer.