-- Database schema
| Physician : EmployeeID [ INT ] primary_key , Name [ TEXT ] , Position [ TEXT ] , SSN [ INT ] | Department : DepartmentID [ INT ] primary_key , Name [ TEXT ] , Head [ INT ] Department.Head = Physician.EmployeeID | Affiliated_With : Physician [ INT ] primary_key Affiliated_With.Physician = Physician.EmployeeID , Department [ INT ] Affiliated_With.Department = Department.DepartmentID , PrimaryAffiliation [ TEXT ] | Procedures : Code [ INT ] primary_key , Name [ TEXT ] , Cost [ INT ] | Trained_In : Physician [ INT ] primary_key Trained_In.Physician = Physician.EmployeeID , Treatment [ INT ] Trained_In.Treatment = Procedures.Code , CertificationDate [ TEXT ] , CertificationExpires [ TEXT ] | Patient : SSN [ INT ] primary_key , Name [ TEXT ] , Address [ TEXT ] , Phone [ TEXT ] , InsuranceID [ INT ] , PCP [ INT ] Patient.PCP = Physician.EmployeeID | Nurse : EmployeeID [ INT ] primary_key , Name [ TEXT ] , Position [ TEXT ] , Registered [ TEXT ] , SSN [ INT ] | Appointment : AppointmentID [ INT ] primary_key , Patient [ INT ] Appointment.Patient = Patient.SSN , PrepNurse [ INT ] Appointment.PrepNurse = Nurse.EmployeeID , Physician [ INT ] Appointment.Physician = Physician.EmployeeID , Start [ TEXT ] , End [ TEXT ] , ExaminationRoom [ TEXT ] | Medication : Code [ INT ] primary_key , Name [ TEXT ] , Brand [ TEXT ] , Description [ TEXT ] | Prescribes : Physician [ INT ] primary_key Prescribes.Physician = Physician.EmployeeID , Patient [ INT ] Prescribes.Patient = Patient.SSN , Medication [ INT ] Prescribes.Medication = Medication.Code , Date [ TEXT ] , Appointment [ INT ] Prescribes.Appointment = Appointment.AppointmentID , Dose [ TEXT ] | Block : BlockFloor [ INT ] primary_key , BlockCode [ INT ] | Room : RoomNumber [ INT ] primary_key , RoomType [ TEXT ] , BlockFloor [ INT ] Room.BlockFloor = Block.BlockFloor , BlockCode [ INT ] Room.BlockCode = Block.BlockCode , Unavailable [ TEXT ] | On_Call : Nurse [ INT ] primary_key On_Call.Nurse = Nurse.EmployeeID , BlockFloor [ INT ] On_Call.BlockFloor = Block.BlockFloor , BlockCode [ INT ] On_Call.BlockCode = Block.BlockCode , OnCallStart [ TEXT ] , OnCallEnd [ TEXT ] | Stay : StayID [ INT ] primary_key , Patient [ INT ] Stay.Patient = Patient.SSN , Room [ INT ] Stay.Room = Room.RoomNumber , StayStart [ TEXT ] , StayEnd [ TEXT ] | Undergoes : Patient [ INT ] primary_key Undergoes.Patient = Patient.SSN , Procedures [ INT ] Undergoes.Procedures = Procedures.Code , Stay [ INT ] Undergoes.Stay = Stay.StayID , DateUndergoes [ TEXT ] , Physician [ INT ] Undergoes.Physician = Physician.EmployeeID , AssistingNurse [ INT ] Undergoes.AssistingNurse = Nurse.EmployeeID |
-- -- What are the names of patients who are not taking the medication of Procrastin-X.

SELECT name FROM patient EXCEPT SELECT T1.name FROM patient AS T1 JOIN Prescribes AS T2 ON T2.Patient  =  T1.SSN JOIN Medication AS T3 ON T2.Medication  =  T3.Code WHERE T3.name  =  'Procrastin-X';