Anda keluar jalur berpikir ini ada hubungannya dengan beberapa baris dari gabungan. Masalahnya adalah dengan logika Anda di klausa WHERE. Anda tidak mengatakan apa yang Anda inginkan dalam hal tanggal, jadi tidak mungkin untuk mengetahui apa solusinya.
Saya menyederhanakannya menjadi hanya melihat tabel pemesanan. Saya mendapatkan dua baris di mana Anda hanya mengharapkan satu. Yang perlu Anda lakukan adalah mencari tahu kondisi yang benar-benar Anda inginkan.
mysql> SELECT * FROM booking WHERE NOT(start <= '2018-07-23' AND end >= '2018-07-21');
+-----+------------+------------+-----------+
| uid | start | end | apartment |
+-----+------------+------------+-----------+
| 1 | 2018-07-18 | 2018-07-20 | 1 |
| 3 | 2018-07-18 | 2018-07-20 | 2 |
+-----+------------+------------+-----------+
2 rows in set (0.00 sec)