The correct way should be explicit with filters and joins separated
SELECT * FROM table1 JOIN table2 ON table1.id = table2.id
NATURAL JOINS may be easy and "clean" but more likely to be utterly unpredictable...
Edit, May 2012.
The accepted answer for the duplicate doesn't actually answer NATURAL JOIN.
These links discuss in further detail.
- https://dba.stackexchange.com/a/6917/630 (DBA.SE)
- Natural join in SQL Server
- SQL Server - lack of NATURAL JOIN / x JOIN y USING(field)
- SQL JOIN: is there a difference between USING, ON or WHERE?
tl;dr
Performance isn't the issue: but your queries should be reliable and predictable which NATURAL JOIN certainly isn't.
"JOIN in the WHERE" aka implied JOIN aka what you call "Cartesian" is also bad as per these links (the same applies to Oracle as well as SQL Server)