Operator ‘AND’ in the get_posts() function’s tax_query terms not working

Try adding include_children parameter as false to your first example (tested):

$args = array(
    'post_type'      => 'workshops',
    'posts_per_page' => -1,
    'fields'         => 'ids',
    'tax_query'      => array(
        array(
            'taxonomy'         => 'workshop_categories',
            'field'            => 'slug',
            'terms'            => array( 'crafts', 'jewellery' ),
            'operator'         => 'AND',
            'include_children' => false,
        )
    )
);

$posts = get_posts( $args );

Unfortunately I can’t explain why, but that was necessary for my test to work.

techhipbettruvabetnorabahisbahis forumutaraftarium24eduseduedusedusedueduedusedueduedus