Jste mimo trasu a myslíte si, že to má co do činění s více řádky ze spojení. Problém je s vaší logikou v klauzuli WHERE. Neříkáte, co chcete, pokud jde o data, takže není možné vědět, jaké by mělo být řešení.
Zjednodušil jsem to tak, že jsem se podíval na rezervační tabulku. Chápu dva řádky, kde očekáváte pouze jeden. Vše, co musíte udělat, je zjistit podmínku, kterou opravdu chcete.
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)