Du är på väg att tro att detta har att göra med flera rader från sammanfogningen. Problemet ligger i din logik i WHERE-satsen. Du säger inte vad du vill ha när det gäller datum, så det är omöjligt att veta vad lösningen ska vara.
Jag förenklade till att bara titta på bokningsbordet. Jag får de två raderna där du bara väntar en. Allt du behöver göra är att ta reda på det villkor som du verkligen vill ha.
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)