Schaut man sich die Beschreibung zu beiden Methoden an, ist eigentlich kein Unterschied auszumachen. In der Praxis können diese beiden Anfragen aber durchaus unterschiedlich reagieren:

$mein_model->cacheQueries = false;
$mein_model->query('SELECT COUNT(DISTINCT plz) FROM test_table');

$mein_model->cacheQueries = false;
$mein_model->execute('SELECT COUNT(DISTINCT plz) FROM test_table');

query() beachtet nämlich die Cache-Einstellungen via cacheQueries nicht, während execute() dies aber tut. Die Rückgabe beider Methoden ist identisch, man sollte also nach Möglichkeit execute() statt query() benutzen, damit man mittels cacheQueries immer die Möglichkeit hat, auf das Model-Caching von Cake Einfluß nehmen zu können.