SELECT count vs DELETE JOIN. Why/how are they different?
The reason the count differs is due to multiple rows being present in tableA that have a foreign key reference to the same row in tableB.  

When using an inner join the SELECT produces a separate row for each of the records in tableA.  The DELETE statement is only affects tableB.  As mentioned in ypercube's comment, if you were to do a distinct count, the numbers would match.