O MySQL silenciosamente converte strings em números em um contexto numérico.
Ele faz isso convertendo os caracteres numéricos iniciais (como dígitos, sinal de menos e ponto decimal).
Se não houver dígitos, ele pára. Então:
where id = 'a'
é interpretado como:
where id = 0
Moral:Nunca use aspas simples em constantes numéricas -- ou constantes que deveriam ser números.