I don't say SQL queries out loud, and trying to do so would probably screw me up; I don't know about you, but I don't sit down to write stuff and get it perfect every time. I often start writing a query, go back and adjust something, start working on another part, tweak this or that, and then finish. You can't do that when you're forced to say something over the phone. And I don't solve problems I've never come across by just starting to code on my own and see where it gets me; especially when it sounds like the kind of problem that someone else out there, probably smarter than me, has already solved. AND I wouldn't want to hire anyone who took that approach. Sometimes, it's fun to reinvent the wheel, especially when you're trying to learn things, but I wouldn't want my developers sitting around all day reinventing everything.
If you really want these people to do these things, plop them down in front of a computer, give them a time limit of x minutes, leave the room and come back and see where they are. This relieves the pressure of you standing over them watching them, gives them time and space to work the problem out, and is much closer to how they'll eventually be working...unless you work at some freaky place where the boss stands over your shoulder and watches you type all day long, in which case I feel sorry for you.