andando a tastoni, ho provato con
"SELECT stanze.id, stanze.numero, stanze.nome, stanze.numPosti FROM stanze LEFT JOIN prenotazioni ON (stanze.id = prenotazioni.idStanza) WHERE ( (prenotazioni.inizio BETWEEN '$inizio' AND '$fine') OR ( prenotazioni.fine BETWEEN '$inizio' AND '$fine') OR (prenotazioni.inizio < '$inizio' AND prenotazioni.fine > '$fine') )"

che dovrebbe trovarmi tutte le stanze prenotate nel periodo $inizio $fine...
e funziona.
solo che a me serve il contrario, ecco.
sperandoci più che credendoci ho provato con [...]WHERE ( !(prenotazioni.inizio [...]
help
considerate che se una stanza è libera, può darsi che nella tabella prenotazioni non ci sia neanche una riga con stanze.id = prenotazioni.idStanza... quindi la left join mi sega le gambe in partenza...giusto?