Why is this query not a syntax error? I have a SQL Server background and I was really surprised.
Select *
I thought it would validate that it has a value, but the behavior is inconsistent, when using id it returns the location with the id , but when using name it doesn't return anything:
https://www.db-fiddle.com/f/enWGyAW4BtLC64PVzkbTVK/0
MySQL has some behavior that does not conform to standard ANSI SQL. In this case, MySQL treats an integer zero value as
falseand any integer non-zero value astrue. In standard SQL, integers are not the same as booleans, but in MySQL they are.When you run the query
WHERE id, it returns rows withid 0.When you run the query
WHERE name, it evaluates the string as an integer, which means taking the numeric value of the leading numeric character (if any) and ignoring any subsequent non-numeric characters. If there are no leading digits, the string has an integer value of 0.When you run the query
WHERE name, it will only return rows if the string stored in that column has a non-zero leading number. In your example'outro'it only has non-digits, so the value is zero and the condition cannot be satisfied.MySQL behaves as designed, but this is not standard SQL.