Credo che l'errore stia qui:
codice:
WHERE p.programmato is true
Non mi risulta che la sintassi da usare con i boolean differisca da quella da usarsi con qualunque altro tipo di dato per il confronto sull'uguaglianza. Si usa sempre il simbolo di uguale:
codice:
WHERE p.programmato = true
O, più semplicemente, essendo di tipo boolean:
codice:
WHERE p.programmato
Da quel che so l'operatore IS è "particolare" e si usa solo con NULL (nelle forme "IS NULL" o "IS NOT NULL") in quanto il confronto con NULL dà sempre esito negativo.
Ciao.