Look for articles/books by Itzik Ben-Gan. He is great with T-SQL (I think's that his entire job :-)).
I also liked Ken Henderson's stuff, particularly "The Guru's Guide to Transact-SQL". I don't know if/what the latest release/version of this is.
Finally, search the net for "T-SQL challenges", try coding them -- before reading their solution(s) of course :-).
If you want a quick simple SQL not T-SQL challenge, try this:
A studentgrade table has one row per student and test. Each student may have taken anywhere from 0 to 3 (never more) tests.
studentgrade --> (studid int, test# int, score int)
Write a single query -- no subqueries, joins, CTEs, etc. -- that lists:
studentid
# of tests taken
hi score (if only one test, it shows here)
mid score (if only two tests, 2nd shows here; if only one test, will be null)
low score (will only be non-null if all 3 tests are found for that student)
Scott Pletcher, SQL Server MVP 2008-2010