Czy events.start_date i events.end_date to czas zarezerwowania samochodów? W takim razie szukasz przedziału dat poza przedziałem <events.start_date; events.end_date>.
Użytkownik podaje w formularzu dwie daty – poczatek (data początkowa rezerwacji) i koniec (data końcowa rezerwacji). Oczywiście musisz zadbać, aby daty były prawidłowo podane (koniec>=poczatek; "=" bo rezerwacja może być na 1 dzień).
Piszesz:
SELECT cars.*, events.*
FROM cars
JOIN events ON events.id_car = cars.id_car
WHERE (poczatek<events.start_date AND koniec<events.start_date)
OR (poczatek>events.end_date AND koniec>events.end_date)
Może być problem, jak samochód jest rezerwowany kilka razy w tabli events, wtedy powyższe zapytanie może dać fałszywy wynik (podany przez użytkownika przedział dat rezerwacji nie pokryje się z jednym wpisem, ale pokryje z innym), ale w tym przypadku lepiej niech wypowiedzą się spece od SQL-a.
Lepiej zrób w formularzu coś na kształt kalendarza, w którym dla danego dnia będą widoczne dostępne samochody. Tu już zapytanie będzie łatwiejsze i odporne na wyżej przedstawiony problem.