Parce que MySQL a exécuté votre requête sans aucune erreur. Ce n'est pas parce que vous avez écrit la mauvaise requête que cela signifie que la requête est si mauvaise que MySQL ne l'acceptera pas.
Chaque fois que vous générez des requêtes SQL par programme, vérifiez (par débogage ou encore mieux par des tests unitaires) que la requête a été créée correctement pour ce que vous voulez faire.
Si vous souhaitez obtenir une exception à chaque fois qu'une erreur se produit, activez cela :
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);