Why do cross-database statements break replication when using filters?
I don't know the rationale, but it is a problem that has bitten many users.

It is not just DDL statements, but also DML:

replicate_do_db = A  or  binlog_do_db = A  or ... (several syntaxes possible)
USE B;
INSERT INTO A ...;


Won't perform the INSERT.