As respostas para suas três primeiras perguntas são:sim, sim e não.
Quando a string
'text'
é convertido em um número, ele se torna o valor 0
. A documentação que descreve a conversão de tipo está aqui .
Para sua consulta:
SELECT table.*
FROM table
WHERE id='text';
A regra é capturada por este trecho da documentação:
Em todos os outros casos, os argumentos são comparados como números de ponto flutuante (reais).
Em outras palavras, isso é realmente equivalente a:
WHERE id = 0.0