Запросы 2 и 3 эквивалентны, поэтому они должны выполнять то же самое. Запрос 1 - это нечто совершенно другое; запрос 1 эквивалентен этому:
select id from tbl_xxx WHERE (2708 <= id) <= 1562755185;
Поскольку 2708 <= id
является логическим выражением, а MySQL использует ноль и единицу в качестве логического значения, ваш запрос всегда сравнивает 1 <= 1562755185
или 0 <= 1562755185
и, следовательно, вырождается в следующее:
select id from tbl_xxx;
Предполагая, что id
никогда не NULL, конечно.
Так что запросы совершенно разные, и нет никаких оснований ожидать, что они будут выполнять то же самое.
Например, у меня есть стол, который выглядит примерно так:
mysql> select * from stars;
+----+-------+
| id | stars |
+----+-------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 2 |
| 5 | 1 |
| 6 | 1 |
| 7 | 1 |
| 8 | 2 |
| 9 | 1 |
+----+-------+
A between
делает это:
mysql> select * from stars where id between 3 and 5;
+----+-------+
| id | stars |
+----+-------+
| 3 | 3 |
| 4 | 2 |
| 5 | 1 |
+----+-------+
Но ваш a <= id <= b
делает это:
mysql> select * from stars where 3 <= id <= 5;
+----+-------+
| id | stars |
+----+-------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 2 |
| 5 | 1 |
| 6 | 1 |
| 7 | 1 |
| 8 | 2 |
| 9 | 1 |
+----+-------+