I think the ’field’ parameter of tax_query should be ’term_id’ rather than ’id’
Reading from the Codex page linked to, I think the value of ’field’ in the tax_query array should be ’term_id’ rather than ’id’: ”Possible values are ’term_id’, ’name’ and ’slug’. Default value is ’term_id’.” I’m guessing ’id’ only works because it causes a fall-back to the default.