-- Si consideri la query n.8 dell'esercitazione.
-- "Trovare l'elenco ordinato dei genitori i cui figli guadagnano tutti
-- piu' di 20 milioni."

-- Si consideri la soluzione (proposta da uno studente in aula):

SELECT DISTINCT genitore
FROM genitori
WHERE figlio NOT IN (SELECT nome
                     FROM persone
                     WHERE reddito <=20)
;

-- Nonostante ad un occhiata superficiale questa soluzione sembri
-- corretta, in realta' non lo e' in quanto invece di restituire i
-- genitori i cui figli guadagnano TUTTI piu' di 20 milioni,
-- restituisce i genitori che hanno ALMENO UN figlio che guadagna piu'
-- di 20 milioni. Il fatto che nel nostro esempio la query di cui
-- sopra restituisca proprio i valori attesi e' dovuto al fatto che
-- nessun genitore ha contemporaneamente un figlio il cui reddito e'
-- maggiore di 20 milioni ed un figlio il cui reddito e' minore. Se
-- infatti eseguiamo i seguenti inserimenti:

INSERT INTO PERSONE (Nome, Reddito,Eta,Sesso) VALUES ('Pippo',21,20,'M');
INSERT INTO GENITORI (Figlio,Genitore) VALUES ('Pippo','AnnaMaria');
INSERT INTO GENITORI (Figlio,Genitore) VALUES ('Pippo','AntonGiulio');

-- si puo' verificare che la query di cui sopra restituisce anche Annamaria
-- ed AntonGiulio, benche' essi abbiano come figlio Ezechiele, il cui
-- reddito e' inferiore a 20 milioni. Per esercizio, si confronti la
-- soluzione con quella restituita dalla versione corretta della query:

SELECT DISTINCT genitore
FROM genitori
WHERE genitore NOT IN -- differenza in MySQL
    (SELECT genitore
     FROM persone, genitori
     WHERE figlio=nome and reddito <=20)
;