Entrambe le forme possono essere corrette a seconda del contesto temporale e della sfumatura di significato. "Se sia" (congiuntivo presente) si usa per eventi futuri o presenti con incertezza, mentre "se fosse" (congiuntivo imperfetto) è preferibile con un verbo principale al passato o per esprimere ipotesi irreali o desideri.
"Se sia" (congiuntivo presente) e "se fosse" (congiuntivo imperfetto) si usano in contesti diversi: "se sia" è più comune e formale per esprimere ipotesi o possibilità presenti/future ("Vorrei sapere se sia possibile"), mentre "se fosse" si usa soprattutto dopo verbi al condizionale (come "vorrei", "spererei") o per indicare un'ipotesi più lontana nel tempo o più incerta ("Vorrei che fosse" per un desiderio attuale ma meno concreto, o "se fosse" per una situazione passata ipotetica).
Più che di fosse (imperfetto) o di sia (presente) qui si parla di fosse accaduto (trapassato) o di sia accaduto (passato), tutti tempi del modo congiuntivo. La forte carica epistemica (perché qualcosa in realtà è accaduto!) rende preferibile l'uso del trapassato: come se nulla fosse accaduto.
Avete detto che i verbi che esprimono un desiderio o una volontà, al condizionale, esigono l'uso del congiuntivo imperfetto. Quindi la frase corretta è: "vorrei che fosse/fosse stato Giovanni a venire con noi". Se prendiamo questa frase: "vorrei sapere se sia possibile prenotare".