Like everything else, write it the simple/elegant way then profile it and tweak if you have to.
Once you're at the point where you have to worry about these things, tuning the SQL is still probably much less complex than writing the query in your app language or figuring out how a NOSQL db can do these joins.