As with the other practitioners above. Easy to get started, hard to be really good.
Another point not yet made …
There is also a gigantic conceptual leap from “I can write good queries to extract data from this (fairly-) well designed database full of data.” to “I can interact with the business users to determine their needs, then build a conceptual data model which accurately capures those needs, then build a database to store that model, and the set of procedures to insert, update, and query that data in a logically consistent fashion over time.” And to backup, restore, import, export,and update all this over time as the business or technology changes.
A lot of SQL-related work starts out with “We just need you to create a report on XYZ from this existing database”. Not too hard. But the water gets deep quickly.
And very often the business doesn’t understand that to get the meaningful report on facts A, B, and C which they so desparately want, they need to have some way of capturing the upstream facts Q, W, and E. Which they presently don’t have.
Only if you understand the business significance of what they’re asking for and have the business process, logical, (and sometimes statistical) chops to determine how that really maps into their data model can you really create a good result. And then use SQL as the low-level tool to generate that result.
As a micro example, here Why does SQL assume you don't want to indlude NULLs in queries? - Factual Questions - Straight Dope Message Board is a recent thread which touched on a situation with a very naive database design and a sorta-naive self-taught data base operator/SQL coder getting tripped up. And notice the 17 varying opinons from experts on the goods and bads of the underlying issue.
As with most things, a lot of harm comes from people running just outside their own sphere of knowledge. They’re tripping over their own unknown unknowns. And (of course) they don’t know it. Don’t be that person.