I am pretty sure that your top query would result in a cartesian join to every record in B for records that have a NULL due to the or
statement in your query.
Based on that, you would be better off using the outer join.
I also wrote a lengthy Q&A that looks at joins and how to pull data from multiple tables you might be interested in ( How can an SQL query return data from multiple tables ) it covers unions, inner and outer joins as well as subqueries. It has loads of code and output results which are explained in detail. (To the point I hit the answer length limit, so had to post a second answer)
Edit: After running a quick test, this is what I come up with:
mysql> select a.ID, a.Title, b.Name as Author
from books a join authors b
on a.authorID=b.ID or b.id=0;
+----+----------------------+-------------------+
| ID | Title | Author |
+----+----------------------+-------------------+
| 1 | Call of the Wild | Fluffeh |
| 1 | Call of the Wild | Jack London |
| 2 | Martin Eden | Fluffeh |
| 2 | Martin Eden | Jack London |
| 3 | Old Goriot | Fluffeh |
| 3 | Old Goriot | Honore de Balzac |
| 4 | Cousin Bette | Fluffeh |
| 4 | Cousin Bette | Honore de Balzac |
| 5 | Jew Suess | Fluffeh |
| 5 | Jew Suess | Lion Feuchtwanger |
| 6 | Nana | Fluffeh |
| 6 | Nana | Emile Zola |
| 7 | The Belly of Paris | Fluffeh |
| 7 | The Belly of Paris | Emile Zola |
| 8 | In Cold blood | Fluffeh |
| 8 | In Cold blood | Truman Capote |
| 9 | Breakfast at Tiffany | Fluffeh |
| 9 | Breakfast at Tiffany | Truman Capote |
+----+----------------------+-------------------+
18 rows in set (0.00 sec)
mysql> select a.ID, a.Title, b.Name as Author
from books a right outer join authors b
on a.authorID=b.ID;
+------+----------------------+-------------------+
| ID | Title | Author |
+------+----------------------+-------------------+
| NULL | NULL | Fluffeh |
| 1 | Call of the Wild | Jack London |
| 2 | Martin Eden | Jack London |
| 3 | Old Goriot | Honore de Balzac |
| 4 | Cousin Bette | Honore de Balzac |
| 5 | Jew Suess | Lion Feuchtwanger |
| 6 | Nana | Emile Zola |
| 7 | The Belly of Paris | Emile Zola |
| 8 | In Cold blood | Truman Capote |
| 9 | Breakfast at Tiffany | Truman Capote |
+------+----------------------+-------------------+
10 rows in set (0.00 sec)
Which is certainly not the same as an outer join. As I thought (at least in MySQL) the results cartesian in the first statement, but not in the outer join.