You've made the query difficult because you're searching for records that AREN'T in the unavailable table. THe statement would be much easier to construct if you had an "available' table.
First you want to do an outer or LEFT JOIN -- here's for illustration purposes
SELECT unavailable.personid as 'OUT', person.id,
person.name,
FROM person
LEFT JOIN unavailable ON unavailableID.personID=person.ID
WHERE
unavailable.unavailableDate=CURRENT_DATE()
This would return something like
'OUT' id name
123 123 Joe
222 Mary
342 Bob
888 888 Steve
Joe and Steve have records in the unavilable column, and the unavailable personids are returned.
You want those records left out, so
add this to the query
AND unavailable.personID=NULL
SELECT unavailable.personid as 'OUT', person.id,
person.name,
FROM person
LEFT JOIN unavailable ON unavailableID.personID=person.ID
WHERE
unavailable.unavailableDate=CURRENT_DATE()
AND unavailable.personID=NULL
This would return something like
'OUT' id name
222 Mary
342 Bob
Now that you've got the records you want, modify the query to include the type through an inner join
SELECT person.id,
person.name,
personType.personTypeName
FROM person,
INNER JOIN personType ON person.personType=personType.personTypeID
LEFT JOIN unavailable ON unavailableID.personID=person.ID
WHERE
unavailable.unavailableDate=CURRENT_DATE()
AND unavailable.personID=NULL
This would return something like
id name Type
222 Mary Choir
342 Bob Vestry
etc.