they think they know what they're doing, but when you ask them an SQL question they use a sequence of nested queries without any join statements.
And what exactly is wrong with that?
Query optimizer will generally convert a nested query into a join when necessary. And for a non-correlated nested query (and possibly some particularly shaped indexes) nesting is probably a better answer to begin with.
You speak the truth. Look at it this way:
select something from table1 where id in (select table1_id from table2 where name ilike '%smith%');
select table1.something from table1 inner join table2 using table1.id=table2.table1_id where table2.name ilike '%smith%';
They're equivalent, and if you're using a reasonable rdbms (I use PostgreSQL) they end up being optimized identically. IMHO, the first one is far easier to read and understand, particularly if you start adding even more and more tables and restrictions. Something I've picked up over the last 25 years of paid IT work is that maintainability trumps nearly everything else given the price disparity between hardware and human time. (obviously there are limits to that)
In my company I maintain tons of code that I've written over the last 15 years. People call me up and expect for me to be able to look at code that I wrote 10 years ago and make changes. How about places where there's actual staff turnover? Writing readable and maintainable code is just better.