Why does "DELETE WHERE (VARCHAR)=0" execute successfully?
When a string (VARCHAR) is compared to a number (0), any digits at the beginning of the string are converted to a number.  If there are no digits (eg, 'Mike'), the numeric value is 0.

WHERE 'Mike' = 0 -- succeeds
WHERE 'Mike' = '0' -- fails


Coding like that cannot be automatically prevented.  This is part of debugging your application.

Similarly, if you use an INT in a string context (eg, CONCAT()), the INT value will be converted to a string.