Your concept regarding NOT Exist is correct, but here the inner subquery will not be empty for any sid except sid=22(Justin)
For eg consider sid=31 inner subquery returns {101,103}-{102,103,104}={101}
similarly for sid=64 inner subquery returns {101,103}-{101,102}={103}
sid=22 inner subquery returns {101,103}-{101,102,103}={}
Analysis of inner subquery
For any sid ‘x’,
[ ((Select B.Bid FROM Boats B
WHERE B.color <> ‘Red’) ----bid of non red boats
EXCEPT
(Select R.Bis FROM Reserves R
WHERE R.Sid = S.Sid)) -------bid of boats reserved by x ] ie
Bid of non red boats – bid of boats reserved by x=Bid of non red boats not reserved by x,
So,for any sid s, the inner subquery returns Bid of non red boats not reserved by x
And as per the qstn this innery query should be empty(that is, if there isn’t be any bid of non red boats not reserved by x), then that sid x will come in output, which in turn means x must reserve all non red boats
So sid=22 only satisfies the condn, hence only 1 tuple will come in the output