How to improve this multiple UNION query?

I need to find the users who have either

  1. a shared video credit;
  2. a shared production credit; or
  3. a shared group.

This is currently the query I came up with:

SELECT profile_id FROM productions_productionmember WHERE production_id in
    (SELECT production_id FROM productions_productionmember WHERE profile_id=?)
UNION
SELECT profile_id FROM groups_groupmember WHERE group_id in
    (SELECT group_id FROM groups_groupmember WHERE profile_id=?)
UNION
SELECT profile_id FROM videos_videocredit WHERE video_id in
    (SELECT video_id FROM videos_videocredit WHERE profile_id=?)

Relevant tables:

groups_groupmember
- profile_id
- group_id 

videos_videocredit
- profile_id
- video_id

productions_productionmember
- profile_id
- production_id

How can improve on this query?


SELECT DISTINCT p.profile_id
FROM productions_productionmember p
left outer join groups_groupmember g on g.profile_id = p.profile_id
left outer join videos_videocredit v on v.profile_id = p.profile_id
WHERE v.video_id is not null or g.group_id is not null
or p.production_id in (SELECT production_id
                     FROM productions_productionmember
                     WHERE profile_id=?)