Неявное преобразование происходит не только из int в boolean, но и наоборот:
X++:
int d= 10;
boolean t= false;
;
t= d == (5 || 10); // false
t= d == (5 && 10); // false
d= t; // 0
Проблема в том, что компилятор пропускает такое без звука в отличии от, например, C++ или C#. В сложном условии легко что-то не заметить и потом потратить очень много времени на отладку, как это произошло со мной

. MSSQL ведет себя так же (про других врать не буду), а т.к. у нас один и тот же логический аппарат используется и во встроеных запросах и в простых расчетах, то может от сюда ноги ростут?
К стати первая строчка могла бы стать элегантной заменой этому:
X++:
t= (d == 5 || d == 10); // true