hakanakbulut MySQL kullandığınızı varsayıyorum; tip dönüştürmesinden kaynaklı yapıyordur. code = 0 dediğinizde burada code alanı farklı bir tip, 0 ise farklı bir tip. Karşılaştırma yaparken code alanı string olduğu ve karşılaştırılmak istenen alan da int olduğu için code alanını int olarak dönüştürmeye çalışıyor. code alanındaki değerler de hepsi sayısal olmayan bir değerle başlıyorsa hepsini 0 olarak ele alıyor. Bu durumda sizin WHERE code = 0
sorgusu aslında WHERE 0 = 0
sorgusuna dönüşmüş oluyor ve o yüzden tüm kayıtları getiriyordur. Şu tabloda örnek bazı dönüşümleri gösterdim:
+-----------+------------------+
| code | int'e Dönüşüm |
+-----------+------------------+
| 0 | 0 |
| Laravel | 0 |
| 4kat | 4 |
| -8derece | -8 |
| 2e3 | 2000 | (Burada 2e3 bilimsel bir ifade, 2 * 10^3 ifade ettiği için 2000'e dönüşüyor)
+-----------+------------------+
Yani WHERE code = 2000 yaparsanız ve code alanında 2e3 varsa o kaydı size getirecek demektir. Bunu engellemek için WHERE code = 2000 değil WHERE code = '2000' şekilde sorgu yazmanız lazım, yani sağ tarafı da sol tarafla aynı tipe getirmeniz lazım.
https://dev.mysql.com/doc/refman/8.0/en/type-conversion.html